3

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

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

员工和主管都在同一个表中,并由他们的 ninumber 引用。我被要求构建的查询是:

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 中执行 NON 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

谢谢。

4

2 回答 2

3

In your result table column description, I see no minit, address and number of occurrences. Therefore I would simplify your select to:

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;
于 2012-10-31T15:35:08.593 回答
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

于 2015-03-23T21:43:17.333 回答