我被要求在简单的员工数据库列上创建一个查询,包括:
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
感谢。
答案 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