Как я могу добавить IF IF в условие SQL WHERE, как это? - PullRequest
0 голосов
/ 26 июня 2018

У меня не так в БД, и у меня возникла следующая проблема при работе с запросом MySql , для которого требуется условие IF в статистике WHERE .

Мне нужно это условие ЕСЛИ, потому что базовый стат должен отличаться от идентификатора страны, полученного самим запросом. Я пытаюсь объяснить вам, что мне нужно в деталях.

Это мой запрос (который не работает):

SELECT
    LCZ1.id                                          AS localization_id,
    LCZ1.description                                 AS localization_description, 
    CNT.id                                           AS country_id,
    CNT.country_name                                 AS country_name,
    CNT.isActive                                     AS country_is_active,
    RGN.id                                           AS region_id,
    RGN.region_name                                  AS region_name,
    PRV.id                                           AS province_id,
    PRV.province_name                                AS province_name,
    DST.id                                           AS district_id, 
    DST.district_name                                AS district_name,
    SCT.id                                           AS sector_id,
    SCT.sector_name                                  AS sector_name

FROM Localization                                   AS LCZ1
LEFT JOIN Country                                   AS CNT
     ON LCZ1.country_id = CNT.id
LEFT JOIN Region                                    AS RGN
     ON LCZ1.region_id = RGN.id
LEFT JOIN Province                                  AS PRV
     ON LCZ1.province_id = PRV.id 
LEFT JOIN District                                  AS DST
     ON LCZ1.district_id = DST.id
LEFT JOIN Sector                                    AS SCT
     ON LCZ1.sector_id = SCT.id

WHERE
     (LCZ1.country_id = (SELECT LCZ2.country_id FROM Localization AS LCZ2 WHERE LCZ2.id = 5))

IF(LCZ1.country_id = 1)
BEGIN
AND
     LCZ1.country_id is not null
END

IF(LCZ1.country_id = 2)
BEGIN
AND
     LCZ1.country_id is not null
END

Как видите, условие WHERE начинается с этого:

WHERE
     (LCZ1.country_id = (SELECT LCZ2.country_id FROM Localization AS LCZ2 WHERE LCZ2.id = 5))

В основном я выбираю значение LCZ1.country_id , выполняя второй запрос на выборку, работающий по localizations_id. Я указываю локализацию, получая ее country_id, который используется в качестве значения условия where. Работает нормально.

Затем мне нужно использовать это восстановленное значение, чтобы добавить условие AND к моему условию WHERE . country_id может быть только 1 или 2.

Итак,

, если извлеченное значение country_id равно 1 -> добавить условие AND.

, если полученное значение country_id равно 2 -> добавить еще одно условие ADD.

Как я могу исправить свой запрос и правильно обработать эту ситуацию?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вам не нужны операторы IF, вам просто нужно немного переосмыслить ваше предложение WHERE.

Поскольку вы хотите добавить предикат LCZ1.country_id is not null всякий раз, когда LCZ1.country_id равен 1 или 2, вы можете переформулировать это, чтобы просто проверить, что LCZ1.country_id является одним из обязательных значений:

AND LCZ1.country_id in (1, 2)
0 голосов
/ 26 июня 2018

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

SELECT  ......

FROM Localization                                   AS LCZ1
LEFT JOIN Country                                   AS CNT
     ON LCZ1.country_id = CNT.id
LEFT JOIN Region                                    AS RGN
     ON LCZ1.region_id = RGN.id
LEFT JOIN Province                                  AS PRV
     ON LCZ1.province_id = PRV.id 
LEFT JOIN District                                  AS DST
     ON LCZ1.district_id = DST.id
LEFT JOIN Sector                                    AS SCT
     ON LCZ1.sector_id = SCT.id

INNER Localization LCZ2 ON LCZ1.country_id = LCZ2.country_id 
         AND LCZ2.id = 5 AND LCZ1.country_id = 1 AND  LCZ1.country_id is not null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...