簡體   English   中英

如何將使用IF語句的查詢固定為WHERE條件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM