2012-10-31 67 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