日期:2014-05-18  浏览次数:20430 次

Sql查询问题,很奇怪的
如题,三个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 女

为什么找了两次,如何只找一次


------解决方案--------------------
INSERT INTO dbo.dif (name, sex)
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)
------解决方案--------------------
declare @Sum table(ID varchar(255),Name varchar(255),Sex varchar(255))
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.Sex

select * from @Dif
/*
ID Name Sex
364 B 女
365 C 女
*/