【问题标题】:Find all pairs of employees who have the same birthday date each year查找每年生日日期相同的所有员工对
【发布时间】:2014-01-05 21:31:13
【问题描述】:

正如题名所说,我想找出每年生日日期相同的所有员工对,比如结果表的每一行都必须显示一对员工,并且每对员工都必须出现结果表中只有一次。

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

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 个生日相同的人怎么样?

标签: sql


【解决方案1】:

问题是您是在实际日期加入的。您可以在 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】:

    你很亲密!

    将 where 条件放入 join 中就完成了。

    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 ` 
    

    【讨论】:

    • 非常感谢您的帮助!
    【解决方案3】:

    不要使用 进行 empno 比较,使用 > 或

    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
    

    【讨论】:

    • 这只会显示出生年份相同的配对,对吗?
    • 我编辑了查询以忽略日期的年份部分。
    • @JoeLove 你忽略了这一天,而不是年份。
    • 抱歉,请再看一遍。我的大脑显然坏了。感谢@DStanley 的提醒
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    相关资源
    最近更新 更多