Я не так в 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
Что не так в моем запросе? Что мне не хватает? Как я могу это исправить?
Ниже приведено немедленное исправление вашего 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)
)
Вероятно, есть лучший способ написать это, возможно, без подзапроса. Если вы можете обновить свой ответ, чтобы лучше описать проблему, возможно, этот ответ можно упростить.
LCZ2
выходит за рамки. Неясно, какую логику хочет реализовать ОП.
LCZ2
выходит за рамки.