SQL中in的问题请教

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中in的问题请教相关的知识,希望对你有一定的参考价值。

select a.*,b.name from table1 as a left join table2 as b on a.id in (1,2,3)
上面这句正常
select a.*,b.name from table1 as a left join table2 as b on a.id in b.cid
上面这句报错,b.cid这个列是nvarchar类型,值为"1,2,3"。请问一下怎么修改一下这一句sql语句,达到第一句sql的效果呢?

select a.*,b.name from table1 as a left join table2 as b on a.id=b.id where a.id in ('1','2','3')

--a.id=b.id 根据连接条件改一下。
参考技术A 可以使用 CHARINDEX 替代 IN 的功能

select a.*,b.name
from
table1 as a left join table2 as b
on CHARINDEX( ',' + CAST(a.id as varchar) + ',' , ',' + b.cid + ',') > 0

参考资料:http://hi.baidu.com/wangzhiqing999/blog/item/1b8698fe14d68d8258ee9014.html

参考技术B select a.*,b.name from table1 as a left join table2 as b on a.id in (b.cid)
in 操作符后边列出的值要用括号扩住,少了括号肯定报错,这条查询我mysql测过,没问题;
看你b.cid是nvarchar类型,应该是sqlserver,你测下行不;
还有,你这个b.cid是nvarchar类型,in (b.cid) 等同于in ('1,2,3'),显然达不到 in(1,2,3)的效果,前者一个值,后者三个值,所以你要将b.cid 这个串处理下,用字符串分割函数先分割下,然后再转成a.id这个字段的类型 ;
sql中没有split函数,网上有实现split功能的函数,你可以找一个测下,把这个函数存到数据库服务器中,在查询中调用就行
参考技术C 拜托,int [] cID 这个变量时。net程序里面的数组, sql=“”语句则是要放到sql2005这个dbms里面执行,他们两个是不同的系统怎么能直接写在sql里面??如果你要那样实现,应该先把cID这样的数组值先insert到一个临时表里面,然后在sql里面这样写
where id in (select cID from 临时表),
如果cID里面值不多,可以用拼字符串来实现,就是你说的那个意思,只是拼字符串的方法不对,应该是
for (i=0 ,i++ ,i<cID.length)
;
sql="******* where id in (" + sql_str1 +")";
最后输出sql检查下,如果没问题就ok了
参考技术D select a.*,b.name from table1 as a left join table2 as b on a.id in b.cid
改成
select a.*,b.name from table1 as a left join table2 as b on
',' +b.cid+',' like ',%' +convert(nvarchar,a.id)+'%,'

这种方式 屡试不爽。
第5个回答  2011-08-22 解释一下 上面第一句IN 后面只能跟前面字段中的数据,你下面那个IN 后面跟的还是字段,锗石不符合格式的。
举例:
select id,name from table_name where name in ('jack','roy');
id name
2 jack
7 roy追问

有不有把数据进行切割,然后转换数据类型呢?
就是把"1,2,3"按,进行split,然后再转换成int类型。但是我不会使用这些高级的函数。

追答

格式:split(字段名,'分隔字符',取出的第几个字符串)
转换字段类型
alter table table_name
modify(需要转换的字段名,int)

以上是关于SQL中in的问题请教的主要内容,如果未能解决你的问题,请参考以下文章

请教SQL问题

请教SQL server 中pivot的详细用法及语法规则

请教mysql一个sql语句,存在则更新,不存在则插入

请教大家一个有些SQL里面INNER JOIN的问题

MSSQL 高手请进,有问题请教!!

关于Oracle的SQL语句中group by的空值问题请教?