Mysql 带子查询的多条件
我有以下疑问:Mysql 带子查询的多条件,mysql,sql,Mysql,Sql,我有以下疑问: 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次 更新: 第一次尝试是: 我认为这是错误的,因为a的所有行都会显示上面的内容 正确的方法是我认为卡尔斯弗里德的,或者这个 第二次尝试: 但是无论您使用哪种方法,即使是您原来的方
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次 更新:
第一次尝试是:
我认为这是错误的,因为a的所有行都会显示上面的内容
正确的方法是我认为卡尔斯弗里德的,或者这个
第二次尝试:
但是无论您使用哪种方法,即使是您原来的方法,我也不认为查询计划会包括从b运行子查询SELECT id 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
美好的我会将左连接改为内部连接,并将WHERE b.id不为NULL的连接一起删除。这解决了特定的情况,但并没有回答一般的问题。如果子查询不能替换为联接,如何在不重复子查询的情况下表示与子查询结果的多个比较?仍然没有回答。
SELECT a.*
FROM a
INNER JOIN b
ON ( a.cityid = b.id OR a.regionid = b.id or a.countryid = b.id )
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