Ist so etwas möglich (ich weiß, diese Aussage nicht funktioniert, ich habe es versucht):SELECT * FROM t WHERE tx ODER ty IN (id FROM z SELECT)
SELECT * FROM t WHERE t.x OR t.y IN (SELECT id FROM z)
Beispiel
Tabelle t:
|id|x |y
|1 |101|201
|2 |102|202
Tabelle z:
|id |
|101 |
|201 |
Und von dieser Tabelle t möchte ich alle Einträge auswählen, in denen entweder das Attribut x oder das Attribut y in der Liste der IDs von Tabelle z enthalten ist.
ich weiß, ich
SELECT * FROM t WHERE t.x IN (SELECT id FROM z) OR t.y IN (SELECT id FROM z)
tun können, aber das fühlt sich an wie es sehr ineffizient ist, wenn die IN
Werte aus einer komplexen Unterabfrage kommen (was dann ist das gleiche in beiden IN
Klauseln).
Oder sind aktuelle Abfrageplaner-Implementierungen so clever, dass beide Unterabfragen die gleichen Ergebnisse liefern und nur einmal ausgeführt werden? Oder gibt es eine andere Lösung mit EXISTS
, die ich derzeit nicht sehe?
PS: Ich benutze Postgres, aber ich suche nach einer generischen Lösung.
funktioniert perfekt ... danke! – unwichtich