我可以使用查询输入参数来设置不同的 where 条件吗? (类似于 IF 语句)
Can I use the query input parameter to have different where condiction? (something like an IF statment)
我不太喜欢 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"
我想实现以下行为:如果传递的参数有值 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')
)
但第一个版本似乎更通用。
我不太喜欢 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"
我想实现以下行为:如果传递的参数有值 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')
)
但第一个版本似乎更通用。