MySQL:具有子查询的多个条件

时间:2011-06-16 13:46:04

标签: mysql sql mysqli

我有以下查询:

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

非常感谢!

2 个答案:

答案 0 :(得分: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 :(得分:2)

<强>更新

第一次尝试是:

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)

相关问题