查询附加值(如果存在),返回所有查询参数

问题描述 投票:0回答:1

我有一个城市列表,如果存在,我需要附加一个特定的“代码”,否则附加“null”。

示例:

输入:

('London', 'Berlin')

条件:

“代码”仅存在于伦敦,那么我希望查询返回:

所需输出:

  city_name |   code
----------------------
    London  |    L
----------------------
    Berlin  |   null
      

我尝试使用 LEFT JOIN 来做到这一点,但结果忽略了柏林行:

WITH params (city_title) AS (
    VALUES 
        ('London'),
        ('Berlin')
)
SELECT params.city_title, codes.code
FROM   params
LEFT JOIN   codes
ON     codes.city_title = params.city_title

也许解决方案应该包含 UNION 但我也得到了相同的结果。

sql postgresql
1个回答
0
投票

由于提供的数据不足,我将根据我的粗浅假设来回答。

请具体说明您的问题。

有2个选项,使用表参数或者参数是输入逗号分隔的字符串。在 SQL 2022 中有一个函数 STRING_Split (对于早期版本,你可以谷歌) 还有另一个选项可以将参数作为 JSON 字符串发送...

Declare @params table (city_title varchar(50))
Declare @codes table (city_title varchar(50), code char(1))
insert into @params Values
('London'), ('Boston'), ('Berlin')
insert into @codes Values
('London', 'L')

--params as a table - use left join
SELECT params.city_title, codes.code
FROM   @params params
LEFT JOIN   @codes codes
ON     codes.city_title = params.city_title

--params as a coma separates string - use Split and Left join
declare @paramString varchar(max) = 'London, Boston, Berlin'
select 
    city_title = param.value,
    codes.code
from STRING_SPLIT(@paramString, ',') param
LEFT JOIN   @codes codes ON  codes.city_title = param.value

两个结果都符合您的输出要求

© www.soinside.com 2019 - 2024. All rights reserved.