发布网友 发布时间:2022-05-23 05:34
共2个回答
热心网友 时间:2023-10-14 13:24
not exists 的意思是为假成立
举例说明:
(创建测试表及数据)
create table dbo.客户产品
(
客户号 varchar(1),
产品号 varchar(4)
)
insert into dbo.客户产品
values
(1,1001),
(1,1002),
(1,2001),
(2,1001),
(2,1002),
(2,1003),
(2,2001),
(2,2002),
(3,1005),
(4,2001)
查询代码分析:
select 客户号
from dbo.客户产品 客户产品1
where not exists
(select * from dbo.客户产品 客户产品2
where 客户产品2.客户号='1'and not exists
(select * from dbo.客户产品 客户产品3
where 客户产品3.客户号='1'--客户产品1.客户号
and 客户产品3.产品号=客户产品2.产品号))
当客户号='1'时,
select * from dbo.客户产品 客户产品2
where 客户产品2.客户号='1'and not exists
(select * from dbo.客户产品 客户产品3
where 客户产品3.客户号='1'--客户产品1.客户号
and 客户产品3.产品号=客户产品2.产品号)
的结果为:(没有记录,结果为假,成立)
客户号 产品号
---- ----
(0 行受影响)
当客户号='2'时,
select * from dbo.客户产品 客户产品2
where 客户产品2.客户号='1'and not exists
(select * from dbo.客户产品 客户产品3
where 客户产品3.客户号='2'--客户产品1.客户号
and 客户产品3.产品号=客户产品2.产品号)
的结果为:(没有记录,结果为假,成立)
客户号 产品号
---- ----
(0 行受影响)
当客户号='3'时,
select * from dbo.客户产品 客户产品2
where 客户产品2.客户号='1'and not exists
(select * from dbo.客户产品 客户产品3
where 客户产品3.客户号='3'--客户产品1.客户号
and 客户产品3.产品号=客户产品2.产品号)
的结果为:(有3行记录,结果为真,不成立)
客户号 产品号
---- ----
1 1001
1 1002
1 2001
(3 行受影响)
当客户号='4'时,
select * from dbo.客户产品 客户产品2
where 客户产品2.客户号='1'and not exists
(select * from dbo.客户产品 客户产品3
where 客户产品3.客户号='4'--客户产品1.客户号
and 客户产品3.产品号=客户产品2.产品号)
的结果为:(有2行记录,结果为真,不成立)
客户号 产品号
---- ----
1 1001
1 1002
(2 行受影响)
热心网友 时间:2023-10-14 13:25
等待高手回答,关注学习