在MYSQL中查找不使用count的记录数

时间:2015-11-01 19:41:51

标签: mysql count

所以,说我正在做一些事情,比如找到所有员工的名字和姓氏,这些员工都在一个以上的项目上工作。我知道最简单的方法是使用COUNT,就像这样....

SELECT e.Fname, e.Lname
FROM employee e INNER JOIN works_on w
ON e.SSN = w.ESSN 
GROUP BY SSN
HAVING COUNT(*) > 1 

这让我得到了我需要的东西,但是我帮助的人问我如何在不使用COUNT的情况下完成这项工作....我不知道。所以,我想我会在这里询问任何指示或建议,因为我对此很不满意。作为参考,下面快速浏览一下使用过的数据库。非常感谢人们提供的任何帮助或指导。

enter image description here

2 个答案:

答案 0 :(得分:1)

正如上面的评论已经指出的那样,如果您绝对想要避免这样的COUNT,您可以加入两次:

SELECT e.Fname, e.Lname
FROM employee e 
INNER JOIN works_on w
  ON e.SSN = w.ESSN 
INNER JOIN works_on wd
  ON wd.PNO != w.PNO
GROUP BY SSN

只能获得works_on中至少有2行的那些,否则双连接失败:)

答案 1 :(得分:1)

只是将类似查询写入Armin和Kenney推荐的另一种方式。

create table employee(ssn int, fname varchar(50), lname varchar(50));
create table works_on (essn int, pno int);

insert into employee values (1, 'Tom', 'Smith'), (2, 'Matt', 'Smith'), (3, 'Sam', 'Smith');
insert into works_on values (1, 1), (2, 1), (2, 2), (3, 1), (3, 2);

select distinct fname, lname
from employee e
inner join works_on w1 on e.ssn = w1.essn
where exists (
  select 1 from works_on where essn = e.ssn and pno <> w1.pno
);

Result:
| fname | lname |
|-------|-------|
|  Matt | Smith |
|   Sam | Smith |

示例:http://sqlfiddle.com/#!9/e2411/5

我更喜欢你拥有的count方法。

相关问题