簡體   English   中英

帶子查詢的多條件

[英]Multiple condition with sub-query

我有以下查詢:

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 次?

可以使用連接而不是使用子選擇

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

更新:

第一次嘗試是:

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 )  

但是無論您使用哪種方式,即使是您原來的方式,我認為查詢計划不會包括運行子查詢(SELECT id FROM b) 3 次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM