Как я могу исправить этот запрос, который использует IF IF в условие WHERE?

0

Я не так в DB (я использую MySql), и у меня есть следующая проблема, пытающаяся добавить условие * IF ** в этот запрос:

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(LCZ2.country_id = 1)
BEGIN
    AND
        LCZ1.region_id is not null
END

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

END

Поскольку вы можете видеть, что я пытаюсь сделать, это иметь другую часть моего условия WHERE, которое зависит от значения LCZ2.country_id, полученного в этом подзапросе:

SELECT LCZ2.country_id FROM Localization AS LCZ2 WHERE LCZ2.id = 5

Что не так в моем запросе? Что мне не хватает? Как я могу это исправить?

  • 0
    Вы должны объяснить, какую логику вы хотите реализовать. Ваш код не имеет смысла, потому что LCZ2 выходит за рамки.
  • 0
    Много внешних соединений. Вы действительно ожидаете найти локализации без страны, региона и т. Д.? Почему вы пытаетесь присоединиться к внешней стране, когда ищете только локализации в той же стране, что и локализация 5? Это не имеет смысла.
Теги:
database
rdbms

1 ответ

2

Ниже приведено немедленное исправление вашего WHERE:

WHERE
    (LCZ1.country_id = (SELECT LCZ2.country_id FROM Localization AS LCZ2 WHERE LCZ2.id = 5)) AND
    (
        (LCZ1.country_id = 1 AND LCZ1.region_id IS NOT NULL) OR
        (LCZ1.country_id = 2 AND LCZ1.provice_id IS NOT NULL) OR
         LCZ1.country_id NOT IN (1, 2)
    )

Вероятно, есть лучший способ написать это, возможно, без подзапроса. Если вы можете обновить свой ответ, чтобы лучше описать проблему, возможно, этот ответ можно упростить.

  • 0
    Я не могу поверить, что за это проголосовали (но я получаю ответ). LCZ2 выходит за рамки. Неясно, какую логику хочет реализовать ОП.
  • 1
    @GordonLinoff Фактически проголосовал дважды. Я не вижу проблемы в области видимости, но я не сомневаюсь, что вы (или я) могли бы написать более жесткий запрос, если бы мы лучше поняли проблему / данные.
Показать ещё 3 комментария

Ещё вопросы

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