在MYSQL中查找不使用计数的记录数
所以,假设我正在做一些事情,比如查找参与多个项目的所有员工的名字和姓氏。我知道最简单的方法是使用COUNT,就像这样在MYSQL中查找不使用计数的记录数,mysql,count,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怎么做……我不知道。所以,我想我会在这里征求任何意见或建议,因为我对这一点没有兴趣。
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怎么做……我不知道。所以,我想我会在这里征求任何意见或建议,因为我对这一点没有兴趣。下面简要介绍一下所使用的数据库,以供参考。任何人能提供的帮助或指导都将不胜感激
正如上面的评论所指出的,如果你想避免这样的计数,你可以加入两次:
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
只会得到那些至少有2行在工作中的,否则双连接失败:只是编写类似于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 |
例如:
不过,我更喜欢你们的计数方法。不止一种方法涉及计数,所以我不会让事情复杂化。也就是说,您可以在works_on上加入两次,确保两者不同,并查看第二个是否为空。谢谢,这一个有效,对我来说最有意义。是的,我知道数数是最好也最简单的方法,我只是讨厌当被问到问题时撞到墙上。谢谢大家。