我有以下查询:
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次?
非常感谢!
答案 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)
。