我可以使用查询输入参数来具有不同的condiction吗? (类似IF的声明)

时间:2018-04-24 12:36:05

标签: mysql sql database rdbms

我不是很喜欢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做这样的事情吗?

2 个答案:

答案 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')
      )

但是第一个版本看起来更加通用。