繁体   English   中英

我可以使用查询输入参数在不同的位置进行查询吗? (类似于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"

我要实现以下行为:如果传递的参数具有值塞内加尔卢旺达,则执行上一个查询。

如果此输入参数的值形式不同,那么塞内加尔卢旺达将执行相同的查询,但要使用此WHERE condition_

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM