我想在这段代码中添加一个 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。如果第一个不存在,那么只有第二个。