2011-06-16 75 views
2

多重條件,我有以下查詢:MySQL的:與子查詢

SELECT * FROM a WHERE 
    cityid IN (SELECT id FROM b) 
    OR regionid IN (SELECT id FROM b) 
    OR countryid IN (SELECT id FROM b) 

有沒有一種方法(使用MySQL語法)來避免運行子查詢3次?

非常感謝!

回答

4

而不是使用子查詢聯接的可用於

SELECT a.* FROM a 
    LEFT OUTER JOIN b 
     ON (a.cityid = b.id OR a.regionid = b.id or a.countryid = b.id) 
WHERE b.id IS NOT NULL 
+1

尼斯。我會將'LEFT'更改爲'INNER JOIN',並將'WHERE b.id IS NOT NULL'全部刪除。 – 2011-06-16 14:17:56

+0

這解決了具體的情況,但它不回答一般問題。在子查詢不能用聯接替換的情況下,如何用子查詢的結果表示多個比較而不重複子查詢?仍然沒有答案。 – matteo 2013-05-14 19:25:48

2

更新時間:

1日試是:

SELECT a.* 
FROM a 
    LEFT JOIN b AS city 
    ON a.cityid = city.id 
    LEFT JOIN b AS region 
    ON a.regionid = region.id 
    LEFT JOIN b AS country 
    ON a.countryid = country.id 

,我認爲這是錯誤的,因爲a所有行會與上面顯示。

正確的方法是,我認爲KarlsFriend的一個,或者這

第二次嘗試:您使用

SELECT a.* 
FROM a 
    INNER JOIN b 
    ON (a.cityid = b.id OR a.regionid = b.id or a.countryid = b.id) 

但無論哪種方式,即使你原來的一個,我不認爲查詢計劃將包括運行3次子查詢(SELECT id FROM b)