Я не так в SQL, и у меня есть следующая проблема. Я работаю с MySql
Я должен изменить этот запрос:
SELECT
USR.id AS hq_user_id,
USR.local_user_id,
LCZ.id AS localization_id,
LCZ.description AS description,
LCZ_COUNTRY_LEVEL.id AS country_id,
LCZ_COUNTRY_LEVEL.description AS country_description
FROM Localization AS LCZ
INNER JOIN User AS USR
ON USR.localization_id = LCZ.id
INNER JOIN Localization AS LCZ_COUNTRY_LEVEL
ON LCZ_COUNTRY_LEVEL.country_id = LCZ.country_id
WHERE USR.local_user_id = 999
удаление этого второго внутреннего соединения:
INNER JOIN Localization AS LCZ_COUNTRY_LEVEL
ON LCZ_COUNTRY_LEVEL.country_id = LCZ.country_id
и заменив его выходом этого другого запроса, который я написал:
SELECT
LCZ2.id AS localization_id_nation_level,
LCZ2.country_id AS country_id
FROM Localization AS LCZ2
WHERE
LCZ2.region_id is null
AND LCZ2.province_id is null
AND LCZ2.city_id is null
AND LCZ2.district_id is null
AND LCZ2.town_id is null
AND LCZ2.village_id is null
Условие объединения должно быть:
LCZ.country_id должен совпадать с полем country_id LCZ2.country_id AS, возвращаемым во втором запросе.
Как мне это сделать?
Вместо того, чтобы присоединяться к таблице Localization
, присоединитесь к вашему желаемому подзапросу. Здесь не так много волшебства. Просто заверните подзапрос в круглых скобках, дайте ему псевдоним (я использовал t
ниже), а затем использую этот псевдоним в условии соединения.
SELECT
USR.id AS hq_user_id,
USR.local_user_id,
LCZ.id AS localization_id,
LCZ.description,
LCZ_COUNTRY_LEVEL.id AS country_id,
LCZ_COUNTRY_LEVEL.description AS country_description
FROM Localization AS LCZ
INNER JOIN User AS USR
ON USR.localization_id = LCZ.id
INNER JOIN
(
SELECT country_id
FROM Localization AS LCZ2
WHERE
region_id IS NULL AND
province_id IS NULL AND
city_id IS NULL AND
district_id IS NULL AND
town_id IS NULL AND
village_id IS NULL
) t
ON LCZ.country_id = t.country_id
WHERE USR.local_user_id = 999;