为什么操作员不工作,即什么都不返回?
Class.getClassLoader()
此查询
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
但IN并没有选择任何记录,但当我把这些代码放入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'
然后它的工作令人惊讶,但不是在返回时,而是子查询。为什么?
答案 0 :(得分:1)
stuff()
的结果是字符串。仅仅因为字符串碰巧包含逗号并不意味着它是一个值列表。字符串'A,B,C'
与列表'A', 'B', 'C'
完全不同。
好消息是,这可以大大简化你的逻辑:
Select c.*
from complaints c
where c.code in (select cs.Code
from MC_Complaints.dbo.Complaints cs
where cs.OverDue = 1
);
还有两点。首先,您的in
表达式后跟一个列别名(codelist
)。这是不允许的语法。
其次,相关的比较是:
where cCode 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'''
)
这是一个in
列表,其中包含一个字符串值。