2013-12-17 42 views
0

正如問題的標題所述,我想查找每年具有相同生日日期的所有員工對,例如結果表的每一行必須顯示一對僱員,每對僱員必須在結果表中只出現一次。查找每年具有相同生日日期的所有員工對

我的查詢如下所示,只能找到具有相同出生日期的成對人員,而且每個成對出現不止一次,但不是每年有相同生日的不同年齡的人。

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 ` 

如果您能幫助我,我將不勝感激!

+1

怎麼樣有3個人有相同的出生日期? –

回答

0

問題是你正在加入實際的日期。您可以加入對日/月或只是刪除連接:

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 
0

不要使用<>進行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 
+0

+1聰明的主意...... –

+0

這隻會顯示出生年份相同的人,對嗎? –

+0

我編輯查詢以忽略日期的年份部分。 –

0

你非常接近!

在連接中放置條件並完成。

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 ` 
+0

非常感謝你的幫助! –

相關問題