在mySQL中没有DISTINCT查询

时间:2012-10-31 15:25:55

标签: mysql sql database

我被要求在简单的员工数据库列上创建一个查询,包括:

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

员工和主管都在同一张桌子上,并由他们的ninumbers参考。我被要求建立的查询是:

诉找到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中执行NON DISTINCT查询,以使数据库返回所有字段而不是将它们分组在一起。

来自我的查询的Reutrn结果

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

感谢。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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