Как я могу соединиться с выводом запроса (как если бы это была таблица) в SQL-запрос?

0

Я не так в 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, возвращаемым во втором запросе.

Как мне это сделать?

Теги:
database
join
rdbms

1 ответ

0

Вместо того, чтобы присоединяться к таблице 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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню