Abfrage PostgreSQL 9.0-Tabelle über Fremdschlüssel-Wert?
-
16-10-2019 - |
Frage
Noob-Typ Frage:
Sagen, ich habe zwei Tabellen, Bonbons und Farben.Die Farben Tabelle enthält nur " code/Wert-Paare wie 01 blau, 02 blau, 03-grün, usw.und wird in der Süßigkeiten Tabelle von code.
Wie kann ich eine Abfrage der in den Süßigkeiten-Tisch für alle blauen Bonbons ohne eine explizite join?Seit zwei Jahren nun habe ich das schreiben von Abfragen mit joins, wie:
WÄHLEN Sie * AUS Süßigkeiten JOIN Farben o ON(ein.color_code = o.color_code)
WO o.color_value = 'blue';
Ich bin mir sicher, jedes mal, ich bringe ein Gewehr, ein Messer zu kämpfen, aber mein googeln hat zu keinem Ergebnis.
Vielen Dank.
Lösung
"Ich bin mir jedes Mal sicher, dass ich eine Waffe in einen Messerkampf bringe, aber mein Googeln war fruchtlos." Was bringt dich dazu, das zu denken? RDBMSS sind so konstruiert, dass sie sich anschließen können
Wenn Ihr Ziel es ist, Sie SQL lesbarer zu machen, bevorzugen Sie möglicherweise die ''Verwendung' Syntax:
SELECT * FROM candies JOIN colors USING(color_code) WHERE color_value = 'blue';
Alternativ können Sie in Ihrer Abfrage, wie Sie in Ihrer Abfrage hart codieren, den Code stattdessen in Betracht ziehen:
SELECT * FROM candies WHERE color_code = '02';
Dies wird jedoch die Lesbarkeit verringern, wenn die Codes in Ihrem realen Szenario nicht beschreibend sind (z. B. "Blu" für Blau).
Andere Tipps
Sie können es schreiben als:
select
ca.*
from
candies ca
where
ca.color_code = (
select co.color_code
from colors co
where co.color_value = 'blue'
)
aber es sollte kein Unterschied.Tatsächlich ist die join-Ansatz ist ein bisschen robuster.
Was mehr ist - Sie sollten loszuwerden, die Farben Tisch, und mit nur color_values anstelle von codes.Es ist eigentlich mehr effiziente.