【问题标题】:Query to find pairs of employees who have the same birthdate查询以查找具有相同生日的员工对
【发布时间】:2017-06-28 17:59:35
【问题描述】:

我有一张有 100 人的表 EMPLOYEE。我想编写一个查询来查找具有相同 BIRTHDATE 的员工对。

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

我是这么想的

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

你觉得对吗?

【问题讨论】:

  • 我尝试投票,但我收到此消息“投票需要 15 声望”

标签: sql


【解决方案1】:

我会这样做:

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

【讨论】:

  • 这实际上与user617850提出的INNER JOIN相同。
  • 非常感谢。如果我想找到每年生日相同的员工对。再次为该对中的每个员工返回 EMPNO、LASTNAME 和 BIRTHDATE。你知道我该怎么做吗?
  • 假设BirthDate 是一个实际的日期变量。 WHERE 语句应该是 WHERE DAY(t1.BirthDate) = DAY(t2.BirthDate) AND MONTH(t1.BirthDate) = MONTH(t2.BirthDate) AND t1.EmpNo &lt;&gt; t2.EmpNo
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我还会添加条件 t1.EmpNo&lt;t1.EmpNO 以避免重复。

    【讨论】:

      【解决方案4】:

      这是我的答案

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

      【讨论】:

      • 也许在你的答案中添加一些解释和格式:)
      猜你喜欢
      • 2014-01-05
      • 2022-01-14
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多