做这样的事情
我不太喜欢SQL,我在 mySQL QUERY上存在以下问题。我试图解释我要做什么。
我有这个查询,它可以正常工作:
SELECT
LNG.id AS language_id,
LNG.language_name AS language_name,
LNG.language_code AS language_code,
CLP.is_default AS id_default_language
FROM Country_Language_Preference AS CLP
INNER JOIN Country AS CNT
ON CLP.country_id = CNT.id
INNER JOIN Languages AS LNG
ON CLP.language_id = LNG.id
WHERE
CNT.country_name = "Senegal"
此查询有一个其中输入参数,以下:
CNT.country_name = "Senegal"
我想实现以下行为:如果传递的参数具有值 senegal 或 rwanda 执行先前的查询。
如果此输入参数具有不同的值表格 senegal 或 rwanda 执行相同的查询,但使用此 where 条件_
CNT.country_name = "GLOBAL"
我可以使用sql吗?
使用 CASE
语句,这应该是可能的。
尝试以下操作:
SELECT
LNG.id AS language_id,
LNG.language_name AS language_name,
LNG.language_code AS language_code,
CLP.is_default AS id_default_language
FROM Country_Language_Preference AS CLP
INNER JOIN Country AS CNT
ON CLP.country_id = CNT.id
INNER JOIN Languages AS LNG
ON CLP.language_id = LNG.id
WHERE
CNT.country_name = CASE WHEN @Country = "Senegal" OR @Country = "Rwanda" THEN "Senegal"
ELSE "GLOBAL" END
只需使用 OR
:
WHERE (CNT.country_name = @country OR @country = 'GLOBAL')
@country
是您传递的任何参数。
如果您想限制这两个国家,则:
WHERE (CNT.country_name = @country OR
(@country NOT IN ('Rwanda', 'Senegal') AND CNT.country_name = 'GLOBAL')
)
,但第一个版本似乎更通用。