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