我可以使用query输入参数来设置不同的where条件吗(有点像if语句)

smdnsysy  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(363)

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

dphi5xsq

dphi5xsq1#

使用 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
pb3s4cty

pb3s4cty2#

简单使用 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')
)

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

相关问题