【发布时间】:2017-06-05 09:44:27
【问题描述】:
为什么运算符不工作,即什么也不返回?
Select * from complaints where Code
IN
(select
distinct
stuff((
select ',' + QUOTENAME(cs.Code,'''')
from MC_Complaints.dbo.Complaints cs where cs.OverDue= 1
order by cs.Code asc
for xml path('')
),1,1,'') as codeslist
from MC_Complaints.dbo.Complaints cs)
这个查询
select
distinct
stuff((
select ',' + QUOTENAME(cs.Code,'''')
from MC_Complaints.dbo.Complaints cs where cs.OverDue= 1
order by cs.Code asc
for xml path('')
),1,1,'') as codeslist
from MC_Complaints.dbo.Complaints cs
返回
'LG/17/05/0','LG/17/05/2','LG/17/05/3','Local Council Board/17/05/1','Local Council Board/17/05/10','Local Council Board/17/05/11'
但是 IN 没有选择任何记录,但是当我将这些代码放在 IN 运算符中时,即
Select * from complaints where Code in
(
'LG/17/05/0','LG/17/05/2','LG/17/05/3','Local Council Board/17/05/1','Local Council Board/17/05/10','Local Council Board/17/05/11'
)
然后它会令人惊讶地工作,但不是在返回时而是在子查询中。为什么 ?
【问题讨论】:
-
一个包含引号字符和逗号的字符串与多个用逗号分隔的字符串不同。与大多数其他编程语言一样,在 T-SQL 中也是如此。你为什么要做
DISTINCT并转换为这个字符串 -IN支持直接有一个子查询。 -
即看起来您的整个查询可能只是
Select * from complaints where Code in (select Code from MC_Complaints.dbo.Complaints where cs.OverDue= 1)。
标签: sql sql-server sql-server-2008 tsql subquery