Обновлено:
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 раза.