[英]How can I fix this query that uses the IF statment into the WHERE condition?
我不是很喜歡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)
)
也許沒有子查詢,這可能是更好的編寫方法。 如果您可以更新答案以更好地描述問題,則可以簡化此答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.