我不太喜欢db,我在处理mysql查询时遇到了以下问题,需要在where语句中使用if条件。
我需要这个if条件,因为where statment的基必须与查询本身检索到的国家id不同。我试着向你详细解释我需要什么。
这是我的查询(不起作用):
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(LCZ1.country_id = 1)
BEGIN
AND
LCZ1.country_id is not null
END
IF(LCZ1.country_id = 2)
BEGIN
AND
LCZ1.country_id is not null
END
如您所见,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执行。我指定一个localizations检索其country\u id,该id用作此where条件的值。很好用。
然后我需要使用这个检索到的值向where条件添加一些and子句。国家/地区id只能是1或2。
所以,
如果检索到的country\u id值为1-->则添加and条件。
如果检索到的country\u id值为2-->则添加另一个add条件。
如何修复查询并正确处理这种情况?
2条答案
按热度按时间whlutmcx1#
您可以使用带有适当的on and and子句的内部连接,以避免where
a0x5cqrl2#
你不需要
IF
声明,你只需要重新考虑一下WHERE
一点点。因为你想添加
LCZ1.country_id is not null
predicate 每当lcz1.country\u id为1或2时,您可以将其重新格式化,只需检查lcz1.country\u id是否为所需值之一: