是这样的可能(我知道这种说法是不工作的,我试了一下):SELECT * FROM T,其中TX或TY IN(SELECT ID FROM Z)
SELECT * FROM t WHERE t.x OR t.y IN (SELECT id FROM z)
例
表T:
|id|x |y
|1 |101|201
|2 |102|202
表Z:
|id |
|101 |
|201 |
并从此表中选择所有条目,其中属性x或属性y包含在表z的id列表中。
我知道我可以做
SELECT * FROM t WHERE t.x IN (SELECT id FROM z) OR t.y IN (SELECT id FROM z)
但这种感觉就像它是非常低效的,当IN
值从一个复杂的子查询来(当时是在这两个IN
条款相同)。
或者当前的查询规划器实现是否足够聪明,以查看这两个子查询是否给出相同的结果并仅执行一次?或者,也许有另一种解决方案,使用我目前看不到的EXISTS
?我正在使用Postgres,但我在寻找一个通用的解决方案。
完美的作品...谢谢! – unwichtich