正如问题的标题所示,我想找到每年生日日期相同的所有员工对,例如结果表的每一行必须显示一对员工,每对员工必须出现结果表中只有一次。
我的查询,如下所示,只查找具有相同生日的人,每对出现不止一次,但不是每年都有相同生日的不同年龄的人。
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 `
如果你能帮助我,我将非常感激!
答案 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 `