导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

select * from 产品库 where 产品编号 int (2,3,4,5,7,9)有些在in里面在"产品库"中没有的,我要怎么才那知道那些没有的

飞一龙 2007-12-11 05:33:17


例如产品库里面的产品编号:1,2,3,4,5,6,7,8,9,
select * from 产品库 where 产品编号 int (2,3,4,5,7,9)有些在in里面在"产品库"中没有的,我要怎么才那知道那些没有的

2,3,4,5,7,9中有可能在产品库中是没有的,例如3,4

要怎么写这条语句知道3,4是在产品库里没有的
...全文
227 点赞 收藏 16
写回复
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
-狙击手- 2007-12-12
create table tb(id int,name varchar(10))
insert tb
select 1,'a' union all
select 2,'b' union all
select 5,'c' union all
select 6,'d' union all
select 7,'e' union all
select 8,'f' union all
select 9,'g'
go
declare @s varchar(1000)
set @s='2,3,4,5,7,9'
set @s = replace(@s,',', ' as id union all select ' )

exec('select * from (select '+@s+') aa
where not exists(select 1 from tb t where aa.id = t.id and t.id in(2,3,4,5,7,9))')


drop table tb
/*

id
-----------
3
4
*/
回复
x_y_qing 2007-12-12
上面的都是牛人...学习中.....
回复
wuxinyuzhu 2007-12-12

--结果
在@t表中没有的 1 a
在@t表中没有的 6 d
在@t表中没有的 8 f
在@s表中没有的 3 NULL
在@s表中没有的 4 NULL

回复
wuxinyuzhu 2007-12-12

declare @s table(id int,name varchar(10))
insert @s
select 1,'a' union all
select 2,'b' union all
select 5,'c' union all
select 6,'d' union all
select 7,'e' union all
select 8,'f' union all
select 9,'g'

--创建临时表记录你要查询产品的ID
declare @t table(id int)
insert @t
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 7 union all
select 9


select bz='在@t表中没有的',a.id,a.name from @s a where not exists(select id from @t where id=a.id)
union all
select bz='在@s表中没有的',b.id ,null from @t b where not exists(select id from @s where id=b.id)

回复
在路上_- 2007-12-12
select * from 产品库 where 产品编号 not in (2,3,4,5,7,9)
回复
qinhl99 2007-12-12
jifen
回复
dawugui 2007-12-11
create table tb(产品编号 int)
insert into tb values(2)
insert into tb values(5)
insert into tb values(7)
insert into tb values(9)
go

select 产品编号 from
(
select 2 产品编号 union select 3 union select 4
union select 5 union select 7 union select 9
) t
where 产品编号 not in
(
select distinct 产品编号 from tb where 产品编号 in (2,3,4,5,7,9)
)

drop table tb

/*
产品编号
-----------
3
4

(所影响的行数为 2 行)
*/
回复
cxmcxm 2007-12-11
除了产品库表外,还有什么表
是否要查产品库中不包含的产品编号
回复
中国风 2007-12-11
用函数分拆:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GO

--3.2.1 循环截取法
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
DECLARE @splitlen int
SET @splitlen=LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
BEGIN
INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @re VALUES(@s)
RETURN
END
GO


declare @Product table(id int,name varchar(10))
insert @Product
select 1,'a' union all
select 2,'b' union all
select 5,'c' union all
select 6,'d' union all
select 7,'e' union all
select 8,'f' union all
select 9,'g'

declare @s nvarchar(100)
set @s='2,3,4,5,7,9'
select
a.*
from
f_splitSTR(@s,',') a
left join
@Product b on a.Col=b.ID
where
b.ID is null



(所影响的行数为 7 行)

col
----------------------------------------------------------------------------------------------------
3
4

(所影响的行数为 2 行)

回复
hellowork 2007-12-11
这样试试:
----创建产品库
declare @Product table(id int,name varchar(10))
insert @Product
select 1,'a' union all
select 2,'b' union all
select 5,'c' union all
select 6,'d' union all
select 7,'e' union all
select 8,'f' union all
select 9,'g'

----将要查询的ID添加到临时表中
declare @t table(id int)
insert @t
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 7 union all
select 9

----查询
select a.* from @t as a LEFT JOIN @Product as b on a.id = b.id where b.id IS NULL

/*结果
id
-----------
3
4
*/
回复
飞一龙 2007-12-11
不是,是3,4编号可能弄错了,所以在库中找不出来.
你用in的语句,就3,4显示出来.

当我用in (这里有几十条时候) 有些显示出来了,有些显示不出,就不知那几条没有显示出来的,要一条一条去找出来,很花时间

有没有办法,一下知就知道了那些没有显示的编号呢
回复
wzy_love_sly 2007-12-11
create table tb (id int,name varchar(8000))
insert into tb select 2,'aaa'
insert into tb select 5,'aaa'
insert into tb select 9,'aaa'

select tempid from (
select * from
(select 1 as tempid
union all select 2
union all select 3
union all select 4
union all select 5
union all select 6
union all select 7
union all select 8
union all select 9) a
left join
tb b on a.tempid=b.id )c where c.id is null





1
3
4
6
7
8
回复
fcuandy 2007-12-11
select a.id from 
(select id=2
union all select 3
union all select 4
union all select 5
union all select 7
union all select 9) a
left join join
(select distinct 产品编号 id from tb where 产品编号 in(2,3,4,5,7,9)) b
on a.id=b.id
where b.id is null
回复
想飞的狼 2007-12-11
select * from 产品库 where 产品编号 not in (2,3,4,5,7,9)
回复
dawugui 2007-12-11
可是这个意思?
回复
dawugui 2007-12-11
select   *   from   产品库   where     产品编号   in   (2,3,4,5,7,9)
select * from 产品库 where 产品编号 not in (2,3,4,5,7,9)
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告