帮忙 帮忙 SQL SERVER语句 我理解不了!
1.这种检索方式正常
select ID, NAME from yjmc where ID IN ('8126130308','8126130208')
--------------------------
查询结果:
ID NAME
8126130308采气管理三区
8126130208采气管理二区
2. 查询 为什么返回是空?
select ID, NAME from yjmc where ID IN
(select '('''+ REPLACE(KHDW,',',''',''')+''')' as khdw from SYS_KHZB where KMDM='1003')
---------------------------
查询结果:
ID NAME
3.分解第二步
(select '('''+ REPLACE(KHDW,',',''',''')+''')' as khdw from SYS_KHZB where KMDM='1003')
---------------------------
查询结果:
khdw
('8126130308','8126130208')
谁给讲讲2里面的SQL语句错在哪里,出不来结果?
[解决办法]
因为,第2种方法,
select ID, NAME from yjmc where ID IN
(select '('''+ REPLACE(KHDW,',',''',''')+''')' as khdw from SYS_KHZB where KMDM='1003')
你已经把khdw的值修改了 ,所以就出不来了,必须是先where 过滤数据,然后在结果集,再处理
'('''+ REPLACE(KHDW,',',''',''')+''')' as khdw 这个
[解决办法]
实际上出来的集合是 ‘('8126130308','8126130208')’这个东西,并不是你所要的8126130308和8126130208的集合。
解决办法是你把它放进变量里,然后通过拆分成8126130308和8126130208的集合,然后在进行使用!
[解决办法]
还有,第1个之所以能运行是因为in ('8126130308','8126130208')
注意这里的括号,不是字符串,而第2种是:
'('''+ REPLACE(KHDW,',',''',''')+''')'
也就是说,括号,也是字符串了。
不过,你可以考虑改成这样,也行,这个应该是要的:
select ID, NAME from yjmc
where exists(select 1
from SYS_KHZB
where KMDM='1003'
and charindex(','+yjmc.id+',',','+KHDW+',')>0 )
select ID, NAME from yjmc where ID IN
(
/*将KHDW以逗号为分割符进行拆分*/
select r1.Value as khdw from SYS_KHZB
CROSS APPLY(
SELECT * FROM dbo.[Split](KHDW,',') s
) r1
where KMDM='1003'
);
--split 方法见 http://blog.csdn.net/feiazifeiazi/article/details/17242355