sql - 如何将 Else 添加到 SQL 的选择中

我想在这段代码中添加一个 ELSE profil_code='abc_all'

SELECT abc.contact_id
FROM   t_sup_supplier s 
INNER JOIN t_bas_address adr ON adr.adr_id=s.adr_id_office
OUTER APPLY (
    SELECT l.contact_id
    FROM t_usr_login l
    INNER JOIN t_usr_login_profil LP ON lp.login_name=l.login_name
    WHERE profil_code=CONCAT('abc_', adr.country_code)
) abc
WHERE s.sup_id=@x_id

我该怎么做?

所以如果最后一部分 profil_code=CONCAT('abc_', adr.country_code) 没有找到,应该取 profil_code='abc_all'

回答1

WHERE profil_code= COALESCE( CONCAT('abc_', adr.country_code), 'abc_all')

回答2

您可以在 WHERE 子句中使用 COALESCE 函数:

WHERE profil_code = COALESCE(
    CONCAT('abc_', adr.country_code), 
    'abc_all'
)

或使用 OR 运算符:

WHERE 
    (profil_code=CONCAT('abc_', adr.country_code) or profil_code = 'abc_all')

回答3

这将做:

profil_code=CONCAT('abc_', adr.country_code) or profil_code='abc_all'

回答4

提供的解决方案正在工作,但不像我预期的那样。现在两者都被触发了。我只需要 ('abc_', adr.country_code) 没有找到,那么只需要profil_code='abc_all'。但是如果找到 ('abc_', adr.country_code) 则不要使用profil_code='abc_all

回答5

所以我尝试如下:

SELECT abc.contact_id
FROM   t_sup_supplier s 
INNER JOIN t_bas_address adr ON adr.adr_id=s.adr_id_office
OUTER APPLY (
    SELECT l.contact_id
    FROM t_usr_login l
    INNER JOIN t_usr_login_profil LP ON lp.login_name=l.login_name
    WHERE profil_code= COALESCE( CONCAT('abc_', adr.country_code), 'abc_all')
) abc
WHERE s.sup_id=@x_id

--> 现在显示的是“abc_all”,但它存在于 table 中

SELECT abc.contact_id
FROM   t_sup_supplier s 
INNER JOIN t_bas_address adr ON adr.adr_id=s.adr_id_office
OUTER APPLY (
    SELECT l.contact_id
    FROM t_usr_login l
    INNER JOIN t_usr_login_profil LP ON lp.login_name=l.login_name
    WHERE (profil_code=CONCAT('abc_', adr.country_code) or profil_code = 'abc_all')
) abc
WHERE s.sup_id=@x_id

--> 它在这里工作,但只是部分工作。因为如果两个 values 都存在,它也会向我展示两者。我只需要第一个 value。如果第一个不存在,那么只有第二个。

相似文章

最新文章