我可以使用查询输入参数来设置不同的 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"

我想实现以下行为:如果传递的参数有值 SenegalRwanda 执行前面的查询。

如果此输入参数具有不同的值形式 SenegalRwanda 执行相同的查询但使用此 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')
      )

但第一个版本似乎更通用。