是這樣的可能(我知道這種說法是不工作的,我試了一下):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