从内部查询中获取具有逗号分隔值的结果-SQL Server

时间:2019-02-11 14:06:30

标签: sql-server

我有一个包含两列的临时表-键和值:

temp_tbl:

key value
---|-----
k1 | a','b

下面是用于将值存储在temp_tbl中的插入脚本:

insert into temp_tbl values ('k1', 'a'+char(39)+char(44)+char(39)+'b');

现在,我想尝试从另一个表(actual_tbl)中获取记录,如下所示:

select * from actual_tbl where field_value in 
(select value from tamp_tbl where key = 'k1');--query 1

但这不会返回任何内容。

我希望以上查询的行为类似于以下查询:

select * from actual_tbl where field_value in 
('a','b');--query 2

查询1我在哪里做错了?

我正在使用 sql server

1 个答案:

答案 0 :(得分:0)

  

查询1我在哪里做错了?

您出问题的地方是无法理解IN关键字与子查询或硬编码列表的配合方式。

当IN子句后跟一个列表时,列表中的每个项目都是一个离散值:

IN ('I am a value', 'I am another value', 'I am yet another value')

后跟子查询时,每一行都会生成一个值。您的临时表只有一行,因此IN子句仅考虑一个值。无论您如何尝试用逗号和单引号来“欺骗”解析器,它都将不起作用。 SQL Server解析器太聪明了,不能被欺骗。它将知道'a','b'的单个值仍然只是单个值,它将查找该单个值。它不会像您尝试的那样将它们视为两个单独的值。