2012-10-31 81 views
2

我被要求爲此創造一個簡單的員工數據庫列的查詢包括:在MySQL的NOT DISTINCT查詢

ninumber - 名字 - 姓氏 - 地址 - SuperVisorNiNumber

員工和主管都全部都保存在同一張表中,並由它們的ninumbers引用。我要求構建的查詢如下:

v。查找NI編號,員工姓名和NI員工分享該主管以及員工和主管在部門8工作的監事的數量。將涉及員工關係兩次在實踐2的查詢vi中完成。您的結果應以下列標題'員工NI編號','名字','姓'和'主管NI編號'列出。

所以我創造了這個查詢:

SELECT e1.ninumber, 
     e1.fname, 
     e1.minit, 
     e1.lname, 
     e1.address, 
     e1.superNiNumber, 
     COUNT(*) AS nrOfOccurences 
FROM employee AS e1, 
     employee AS e2 
WHERE e1.dno = 8 
    AND e1.superNiNumber = e2.ninumber 
    AND e2.dno = 8 
GROUP BY e1.superNiNumber 
HAVING COUNT(*) > 1 

我不能做一個不清晰的查詢工作出了問題,這部分 - 「當員工共享監督員」。該查詢返回一組行,然後隱藏我想要顯示的一些行。

我的問題是:我的查詢是否正確的問題,我可以在MySQL中做一個非DISTINCT查詢讓數據庫返回所有的字段,而不是將它們分組在一起。從我的查詢

NInumber fname minit lname address supervisorNiNum  number of occerences 
666666601 Jill J Jarvis 6234 Lincoln, Antrim, UK 666666600 2 
666666607 Gerald D Small 122 Ball Street, Letterkenny, IRL 666666602 3 
666666604 Billie J King 556 WAshington, Antrim, UK 666666603 2 

感謝

Reutrn結果。

+3

請不要在您選擇不屬於你的小組在使用的列 – Kermit

+0

沒有「NON DISTINCT」在SQL。 –

回答

3

在您的結果表欄描述中,我看到沒有minit, address and number of occurrences。因此,我會簡化您的選擇:

SELECT e1.ninumber, 
     e1.fname, 
     e1.lname, 
     e1.superNiNumber, 
FROM employee AS e1, 
     employee AS e2 
WHERE e1.dno = 8 
     AND e1.superNiNumber = e2.ninumber 
     AND e2.dno = 8 
     and (select count(*) from employee e3 
      where e3.superNiNumber = e1.superNiNumber) > 1; 
+0

我仍然需要刪除e2.superNiNumber的DISTINCT實例 – Bradley

+1

我不知道,如果我完全理解你的「獨特」請求,但看看更新的答案與子選擇。正確! –

+0

準確!非常感謝 – Bradley

1

接受的答案在性能上相當慢。有點搜索後,我設法生產出一個更加快速,相當於:

SELECT e1.ninumber, 
     e1.fname, 
     e1.lname, 
     e1.superNiNumber 
FROM employee AS e1, (SELECT superNiNumber, 
         COUNT(*) AS count 
         FROM employee 
         GROUP BY superNiNumber 
         HAVING count > 1) AS e2 
WHERE e1.superNiNumber = e2.superNiNumber 

信用:http://www.programmingforums.org/thread14669.html