2011-02-17 42 views
2

我有一个100人的员工表。我想编写一个查询来查找具有相同BIRTHDATE的雇员对。查询查找具有相同出生日期的员工对

结果应为该对中的每个员工(6列结果表)返回EMPNO,LASTNAME和BIRTHDATE。

我想类似的东西

SELECT t1.EmpNo 
     ,t1.LastName 
     ,t1.BirthDate 
     ,t2.EmpNo 
     ,t2.LastName 
     ,t2.BirthDate 
    FROM Employee t1 
    INNER JOIN (
    SELECT EmpNo 
     ,LastName 
     ,BirthDate 
    FROM Employee) t2 ON t2.BirthDate = t1.BirthDate 
    WHERE t2.EmpNo != t1.EmpNo 

你是否认为这是正确的吗?

+0

我尝试投票,但是我有这个消息'投票需要15声望' – dali1985 2011-02-17 10:10:32

回答

3

我只想做:

SELECT t1.EmpNo, 
     t1.LastName, 
     t1.BirthDate, 
     t2.EmpNo, 
     t2.LastName, 
     t2.Birthdate 
FROM Employee t1, Employee t2 
WHERE t1.BirthDate = t2.Birthdate 
AND t1.EmpNo <> t2.EmpNo 
+0

这实际上与user617850提出的`INNER JOIN`相同。 – anothershrubery 2011-02-17 09:54:08

+0

非常感谢。如果我想找到一对生日相同的生日,每个生日的年份为 。每个员工再次返回EMPNO,LASTNAME和BIRTHDATE。你知道我该怎么做? – dali1985 2011-02-17 10:16:00

+0

假设`BirthDate`是一个实际的日期变量。 'WHERE'语句应该是'WHERE DAY(t1.BirthDate)= DAY(t2.BirthDate)AND MONTH(t1.BirthDate)= MONTH(t2.BirthDate)AND t1.EmpNo <> t2.EmpNo' – anothershrubery 2011-02-17 10:42:55

1

它看起来正确的,但我会删除第二选择.. 子查询

SELECT 
t1.EmpNo ,t1.LastName ,t1.BirthDate ,t2.EmpNo ,t2.LastName ,t2.BirthDate 
FROM Employee t1 
INNER JOIN Employee t2 ON t2.BirthDate = t1.BirthDate 
WHERE t2.EmpNo != t1.EmpNo 
0

我还想补充一点,t1.EmpNo<t1.EmpNO避免repetions的条件。

-1

这是我的回答

Select name, date From employees Group by date of birth Having count(*)>1;

相关问题