我不是很喜欢SQL,我在 MySql 查询时遇到以下问题。我试着向你解释我要做的事情。
我有这个查询,它运行正常:
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"
此查询有一个 WHERE 输入参数,即:
CNT.country_name = "Senegal"
我想实现以下行为:如果传递的参数的值为塞内加尔或卢旺达,则执行上一个查询。
如果此输入参数的值不同,塞内加尔或卢旺达执行相同的查询,但使用此 WHERE 条件_
CNT.country_name = "GLOBAL"
我可以使用SQL做这样的事情吗?
答案 0 :(得分:1)
使用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
答案 1 :(得分:1)
只需使用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')
)
但是第一个版本看起来更加通用。