Est-ce que quelque chose comme ça est possible (je sais que cette déclaration ne fonctionne pas, je l'ai essayée) :
SELECT * FROM t WHERE t.x OR t.y IN (SELECT id FROM z)
Exemple
Tableau t :
|id|x |y
|1 |101|201
|2 |102|202
Tableau z :
|id |
|101 |
|201 |
Et à partir de cette table t, je veux sélectionner toutes les entrées où l'attribut x ou l'attribut y est contenu dans la liste des identifiants de la table z.
Je sais que je peux faire
SELECT * FROM t WHERE t.x IN (SELECT id FROM z) OR t.y IN (SELECT id FROM z)
mais cela semble être très inefficace lorsque la IN
les valeurs proviennent d'une sous-requête complexe (qui est donc la même dans les deux cas). IN
).
Ou les implémentations actuelles du planificateur de requêtes sont-elles suffisamment intelligentes pour voir que les deux sous-requêtes donnent les mêmes résultats et ne les exécutent qu'une seule fois ? Ou peut-être existe-t-il une autre solution utilisant EXISTS
que je ne vois pas actuellement ?
PS : J'utilise Postgres, mais je cherche une solution générique.