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

Sql 查找每年生日相同的所有员工对,sql,Sql,正如问题的标题所说,我希望找到每年生日相同的所有员工对,例如结果表的每一行必须显示一对员工,并且每对员工只能在结果表中出现一次 我的查询如下所示,只查找具有相同生日的成对的人,并且每对人出现多次,但不查找每年具有相同生日的不同年龄的人 SELECT DISTINCT E1.empno, E1.firstnme, E1.lastname, E1.birthdate,

正如问题的标题所说,我希望找到每年生日相同的所有员工对,例如结果表的每一行必须显示一对员工,并且每对员工只能在结果表中出现一次

我的查询如下所示,只查找具有相同生日的成对的人,并且每对人出现多次,但不查找每年具有相同生日的不同年龄的人

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 ` 
选择不同的E1.empno,
E1.NME,
E1.lastname,
E1.出生日期,
E2.empno,
E2.NME,
E2.lastname,
E2.出生日期
来自员工E1
内部连接雇员E2
在E1.birthdate=E2.birthdate
其中日期(E1.生日)=日期(E2.生日)
月份(E1.生日)=月份(E2.生日)
和E1.empno E2.empno`

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

不要使用empno比较,使用>或问题是您是在实际日期加入的。您可以在日/月加入,也可以删除加入:

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
选择不同的E1.empno,
E1.NME,
E1.lastname,
E1.出生日期,
E2.empno,
E2.NME,
E2.lastname,
E2.出生日期
来自员工E1
内部连接雇员E2
日期(E1.生日)=日期(E2.生日)
月份(E1.生日)=月份(E2.生日)
E1.empno

选择不同的E1.empno,
E1.第一个,
E1.lastname,
E1.出生日期,
E2.empno,
E2.NME,
E2.lastname,
E2.出生日期
来自员工E1、员工E2
其中日期(E1.生日)=日期(E2.生日)
月份(E1.生日)=月份(E2.生日)
E1.empno
你们很接近

将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 ` 
来自员工E1
内部连接雇员E2
日期(E1.生日)=日期(E2.生日)
月份(E1.生日)=月份(E2.生日)
和E1.empno E2.empno`

如果有3个人的出生日期相同呢?这只会显示出生年份相同的配对,对吗?我编辑了查询以忽略日期中的年份部分。@JoeLove您忽略的是日期,而不是年份。很抱歉,请再次查看。我的脑子显然坏了。谢谢你的提醒@dstanley非常感谢你的帮助!
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
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 `