Mysql 如何将IF语句添加到像这样的sqlwhere条件中?

Mysql 如何将IF语句添加到像这样的sqlwhere条件中?,mysql,sql,Mysql,Sql,我不太喜欢DB,我在处理MySql查询时遇到以下问题,该查询需要IF条件进入WHERE语句 我需要这个IF条件,因为where station的基数必须不同于查询本身检索到的国家id。我试着向你详细解释我需要什么 这是我的查询(不起作用): 如您所见,WHERE条件从以下内容开始: WHERE (LCZ1.country_id = (SELECT LCZ2.country_id FROM Localization AS LCZ2 WHERE LCZ2.id = 5)) 基本上,我选择

我不太喜欢DB,我在处理MySql查询时遇到以下问题,该查询需要IF条件进入WHERE语句

我需要这个IF条件,因为where station的基数必须不同于查询本身检索到的国家id。我试着向你详细解释我需要什么

这是我的查询(不起作用):

如您所见,WHERE条件从以下内容开始:

WHERE
     (LCZ1.country_id = (SELECT LCZ2.country_id FROM Localization AS LCZ2 WHERE LCZ2.id = 5))
基本上,我选择的是LCZ1.country\u id值,执行第二个select查询,该查询由localizations\u id执行。我指定的localization检索其country\u id用作此where条件的值。它很好用

然后我需要使用这个检索到的值将一些子句添加到我的WHERE条件中。国家/地区id只能为1或2

所以

如果检索到的国家/地区id值为1-->请添加AND条件

如果检索到的国家/地区id值为2-->添加另一个添加条件


如何修复我的查询并正确处理这种情况?

您可以使用带有正确的ON和and子句的内部联接来避免where

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

您不需要
IF
语句,只需要稍微重新考虑一下
WHERE
子句

由于您希望在LCZ1.country_id为1或2时添加
LCZ1.country_id不为null
谓词,因此您可以重新格式化该谓词,只需检查LCZ1.country_id是否为所需值之一:

AND LCZ1.country_id in (1, 2)

好的,但是…如何处理第二种情况(contry_id=2)查看您的代码似乎在这两种情况下,另一个条件是LCZ1.country_id不是空的,所以只需添加另一个并。。答案已更新。。
AND LCZ1.country_id in (1, 2)