Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MYSQL中查找不使用计数的记录数_Mysql_Count - Fatal编程技术网

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

在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怎么做……我不知道。所以,我想我会在这里征求任何意见或建议,因为我对这一点没有兴趣。

所以,假设我正在做一些事情,比如查找参与多个项目的所有员工的名字和姓氏。我知道最简单的方法是使用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上加入两次,确保两者不同,并查看第二个是否为空。谢谢,这一个有效,对我来说最有意义。是的,我知道数数是最好也最简单的方法,我只是讨厌当被问到问题时撞到墙上。谢谢大家。