MySQL: несколько условий с подзапросом - PullRequest
2 голосов
/ 16 июня 2011

У меня следующий запрос:

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 ]

4 голосов
/ 16 июня 2011

Вместо использования подвыборов можно использовать объединение

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
2 голосов
/ 16 июня 2011

Обновлено:

1-я попытка была:

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, или это

2-я попытка:

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 раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...