一个简单SQL语句,相信你能行
需要使用的语句如下:
SELECT * FROM table1 WHERE int_MyID in (SELECT txt_MyText FROM table2 WHERE int_MyID=1);
我做过的试验:
1、
SELECT txt_MyText FROM table2 WHERE int_MyID=1
这个语句查询出来的结果会是 1,2 (txt_MyText字段类型是varchar)
但int_MyID字段类型是int
2、
如果执行
SELECT * FROM table1 WHERE int_MyID in (1,2)
则可以显示两条记录
3、
但执行
SELECT * FROM table1 WHERE int_MyID in ( '1,2 ')
就只显示一条记录了
可根据第一个表达式查询出来的结果确实就是如上所示,一个varchar型值
我的问题:如何将varchar型 '1,2 ' 做成int型的列表 1,2
------解决方案--------------------select
a.*
from
table1 a,
table2 b
where
charindex( ', '+rtrim(a.int_MyID)+ ', ' , ', '+b.txt_MyText+ ', ')> 0
and
b.int_MyID=1
------解决方案--------------------SELECT * FROM
table1
WHERE cast(int_MyID as varchar(10)) in (SELECT txt_MyText FROM table2 WHERE int_MyID=1)
------解决方案----------------------1.动态SQL
exec( 'SELECT * FROM table1 WHERE int_MyID in ( '+ '1,2 ' + ') ')
--2.换一种方式
SELECT * FROM table1 WHERE Charindex( ', '+int_MyID+ ', ', ',1,2, ')> 0
------解决方案-------------------- SELECT txt_MyText=(case when ISNUMERIC(txt_MyText) =1 then cast(txt_MyText as int) else -1 end) FROM table2 WHERE int_MyID=1