如题,三个Sum、Child、Dif表,数据结构相同,表内容分别如下:
Sum:
ID Name Sex
ID Name Sex
363 A 男
364 B 女
365 C 女
366 D 女
367 B 女
370 C 女
372 G 女
Child:
ID Name Sex
363 A 女
364 B 女
365 C 女
366 D 男
367 E 女
Dif为空,
目的:想将child中与A重复的B、C找出,语句如下:
INSERT INTO dbo.dif
(name, sex)
SELECT dbo.Child.Name, dbo.Child.Sex
FROM dbo.Child INNER JOIN
dbo.[Sum] ON dbo.Child.Name = dbo.[Sum].Name AND dbo.Child.Sex = dbo.[Sum].Sex
结果如下:
DIf:
ID Name Sex
435 B 女
436 C 女
437 B 女
438 C 女
为什么找了两次,如何只找一次
Sum:
ID Name Sex
ID Name Sex
363 A 男
364 B 女
365 C 女
366 D 女
367 B 女
370 C 女
372 G 女
Child:
ID Name Sex
363 A 女
364 B 女
365 C 女
366 D 男
367 E 女
Dif为空,
目的:想将child中与A重复的B、C找出,语句如下:
INSERT INTO dbo.dif
(name, sex)
SELECT dbo.Child.Name, dbo.Child.Sex
FROM dbo.Child INNER JOIN
dbo.[Sum] ON dbo.Child.Name = dbo.[Sum].Name AND dbo.Child.Sex = dbo.[Sum].Sex
结果如下:
DIf:
ID Name Sex
435 B 女
436 C 女
437 B 女
438 C 女
为什么找了两次,如何只找一次
你的语句都没排除A ... 又什么 "想将child中与A重复的B、C找出"
与哪个表的A?
SELECT a.Name, a.Sex
FROM dbo.Child as a
Where exists(Select * from dbo.Child
where Name=a.Name and sex=a.sex and id<a.id)
insert @Sum
select '363','A','男' union all
select '364','B','女' union all
select '365','C','女' union all
select '366','D','女' union all
select '367','B','女' union all
select '370','C','女' union all
select '372','G','女'
declare @Child table(ID varchar(255),Name varchar(255),Sex varchar(255))
insert @Child
select '363','A','女' union all
select '364','B','女' union all
select '365','C','女' union all
select '366','D','男' union all
select '367','E','女'
declare @Dif table(ID varchar(255),Name varchar(255),Sex varchar(255))insert into @Dif
select distinct a.*
from @Child a join @Sum b
on a.Name = b.Name and a.Sex = b.Sexselect * from @Dif
/*
ID Name Sex
364 B 女
365 C 女
*/
INSERT INTO dbo.dif
(name, sex)
SELECT a.Name, a.Sex
FROM dbo.Child AS a
WHERE EXISTS
(SELECT *
FROM dbo. SUM
WHERE Name = a.Name AND sex = a.sex)