多字段 如何 使用 in?

zww19830120 2008-07-10 11:46:00
TABLEA的字段均为varchar

ID ColA ColB Value
1 A 1 "A1"
2 A 2 "A2"
3 B 3 "B3"
4 B 4 "B4"

……

传入的值为:A,1,B,4,…… 这样的数组
请问如何组织SQL语句进行查询?

单一条件的话

SELECT * FROM TABLEA where ColA='A' and ColB='1'
UNION ALL
SELECT * FROM TABLEA where ColA='B' and ColB='4'
UNION ALL
……

或者

SELECT * FROM TABLEA where (ColA + "|" + ColB) in ('A|1','B|4',……)


这样都需要遍历数组元素进行一定组合

没有更好的方式 以一个sql语句搞定
如:
采用类似 ColA in ('A','B') ColBin ('1','4') 和
select a.* from TABLEA as Temp1,(select ID from TABLEA where ……) as Temp2 where a.ID=b.ID的方式


求教!谢谢

...全文
260 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
M1CR0S0FT 2008-07-11
  • 打赏
  • 举报
回复
楼上的夜猫子~
中国风 2008-07-11
  • 打赏
  • 举报
回复
--> --> (Roy)生成測試數據

set nocount on;
if not object_id('Tempdb..#T') is null
drop table #T
Go
set nocount on;
Create table #T([ID] int,[ColA] nvarchar(1),[ColB] int,[Value] nvarchar(4))
Insert #T
select 1,N'A',1,N'"A1"' union all
select 2,N'A',2,N'"A2"' union all
select 3,N'B',3,N'"B3"' union all
select 4,N'B',4,N'"B4"'
Go

declare @s nvarchar(100),@sql nvarchar(2000),@i int
set @s='A,1,B,4'
----
--处理
select @s=@s+',',@Sql=''
set @i=1
while charindex(',',@s)>0
select @sql=@sql+case when @i&1=1 and @i>2 then ' union all ' else '' end+
case when @i&1=1 then ' select * from #T where [ColA]='''+left(@s,charindex(',',@s)-1)+''''
else ' and [ColB]='+left(@s,charindex(',',@s)-1) end,
@s=stuff(@s,1,charindex(',',@s),''),@i=@i+1

exec( @sql)

/*
ID ColA ColB Value
----------- ---- ----------- -----
1 A 1 "A1"
4 B 4 "B4"


*/
sdxiong 2008-07-11
  • 打赏
  • 举报
回复
declare @t table (ID int, ColA char, ColB char, Value char(2))
insert into @t select 1, 'A', 1, 'A1'
insert into @t select 2, 'A', 2, 'A2'
insert into @t select 3, 'B', 3, 'B3'
insert into @t select 4, 'B', 4, 'B4'

declare @p varchar(100)
set @p = 'A,1,B,4'

--按@p的顺序组合查找
select * from @t where charindex(cola+','+colb,@p)>0

--@p中字母与数字任意组合的查找
select * from @t where charindex(cola,@p)>0 and charindex(colb,@p)>0
中国风 2008-07-11
  • 打赏
  • 举报
回复
05用xml,2000用拆分字符串写入临时表处理
ws_hgo 2008-07-11
  • 打赏
  • 举报
回复
kankan...........
待会儿在做
ChinaITOldMan 2008-07-11
  • 打赏
  • 举报
回复
learning
zww19830120 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 roy_88 的回复:]
05用xml,2000用拆分字符串写入临时表处理
[/Quote]

能否介绍一下 2005 xml的处理方式?
prcgolf 2008-07-11
  • 打赏
  • 举报
回复
up

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧