查找每年生日日期相同的所有员工对

时间:2013-12-17 22:06:27

标签: sql

正如问题的标题所示,我想找到每年生日日期相同的所有员工对,例如结果表的每一行必须显示一对员工,每对员工必须出现结果表中只有一次。

我的查询,如下所示,只查找具有相同生日的人,每对出现不止一次,但不是每年都有相同生日的不同年龄的人。

SELECT DISTINCT E1.empno, 
                E1.firstnme, 
                E1.lastname, 
                E1.birthdate, 
                E2.empno, 
                E2.firstnme, 
                E2.lastname, 
                E2.birthdate 
FROM   employee E1 
       INNER JOIN employee E2 
               ON E1.birthdate = E2.birthdate 
WHERE  Day(E1.birthdate) = Day(E2.birthdate) 
       AND Month(E1.birthdate) = Month(E2.birthdate) 
       AND E1.empno <> E2.empno ` 

如果你能帮助我,我将非常感激!

3 个答案:

答案 0 :(得分:0)

请勿使用&lt;&gt;对于empno比较,请使用&gt;或者&lt;,这将使对子不会出现两次。

select e1.*, e2.* 
from employee e1 
inner join employee e2 on month(e2.birthdate)=month(e1.birthdate)
and day(e2.birthdate)=day(e1.birthdate)  and e2.empno > e1.empno

答案 1 :(得分:0)

问题是你要加入实际日期。您可以加入DAY / MONTH或只删除加入:

SELECT DISTINCT E1.empno, 
                E1.firstnme, 
                E1.lastname, 
                E1.birthdate, 
                E2.empno, 
                E2.firstnme, 
                E2.lastname, 
                E2.birthdate 
FROM   employee E1
INNER JOIN employee E2 
ON Day(E1.birthdate) = Day(E2.birthdate) 
   AND Month(E1.birthdate) = Month(E2.birthdate)
   AND E1.empno < E2.empno

SELECT DISTINCT E1.empno, 
                E1.firstnme, 
                E1.lastname, 
                E1.birthdate, 
                E2.empno, 
                E2.firstnme, 
                E2.lastname, 
                E2.birthdate 
FROM   employee E1, employee E2 
WHERE  Day(E1.birthdate) = Day(E2.birthdate) 
       AND Month(E1.birthdate) = Month(E2.birthdate) 
       AND E1.empno < E2.empno

答案 2 :(得分:0)

你非常接近!

将where条件放入连接中,然后就完成了。

FROM   employee E1 
   INNER JOIN employee E2 
           ON Day(E1.birthdate) = Day(E2.birthdate) 
              AND Month(E1.birthdate) = Month(E2.birthdate) 
              AND E1.empno <> E2.empno `