我在数据库中有两个表
Employee
+----------+-------+-----------+-----------+------+-----------+
| Fname | Minit | Lname | Emp_ID | Sex | Dept_num |
+----------+-------+-----------+-----------+------+-----------+
| John | S | Doe | 123456789 | M | 5 |
| Susan | R | Smith | 333445555 | F | 5 |
| Bob | A | Parker | 999887777 | M | 3 |
| Franklin | T | Johnson | 987654321 | M | 4 |
| Debbie | K | Spencer | 666884444 | F | 3 |
| Stephen | L | English | 453453453 | M | 2 |
| Mary | T | Moore | 987987987 | F | 4 |
| James | R | Donaldson | 888665555 | M | 1 |
+----------+-------+-----------+-----------+------+-----------+
Works_on
+-----------+-----------+
| Emp_ID | Proj_num |
+-----------+-----------+
| 123456789 | 1 |
| 123456789 | 2 |
| 666884444 | 3 |
| 453453453 | 1 |
| 453453453 | 2 |
| 333445555 | 2 |
| 333445555 | 3 |
| 333445555 | 10 |
| 333445555 | 20 |
| 999887777 | 30 |
| 999887777 | 10 |
| 987987987 | 10 |
| 987987987 | 30 |
| 987654321 | 30 |
| 987654321 | 20 |
| 888665555 | 20 |
+-----------+-----------+
我一直在做一些基本操作的练习,看看他们在MySQL中做了什么,但有一个我坚持下去。假设我想知道每个项目的所有员工的姓名。由于没有员工在项目1,2,3,10,20和30上工作,因此查询应返回空结果。
我尝试做什么计算每个Emp_ID出现在works_on表中的次数。那会告诉我他们正在进行的项目数量。为此,我尝试在Emp_ID上使用COUNTS
方法。我尝试运行的查询是这样的:
SELECT employee.Fname, employee.Minit, employee.Lname,
COUNT(works_on.Emp_ID) AS Num_projects FROM works_on
INNER JOIN employee
ON works_on.emp_id=employee.emp_id
WHERE num_projects=6;
但是我收到错误,因为num_projects是WHERE子句中的未知列。我是SQL的新手,并且已经在w3schools.com这样的网站上阅读过很多内容,而且很多例子都很简单易懂,但对于初学者来说这样的事情有点复杂。 / p>
我的逻辑是查询将通过并计算每个Emp_ID在works_on中出现的次数。例如,ID 333445555在表中出现4次,因此员工333445555的项目数量为4.我试图让它显示每个员工的项目数量,从那里我可以选择号码这对所有人都有用,就像我说的那样是零。 COUNT
方法是执行此操作的最佳方式,还是使用DISTINCT
更合适。我认为,因为COUNT
返回符合指定条件的行数,所以这将是正确的操作。
答案 0 :(得分:-2)
注意MySQL中的区分大小写:
你有:
SELECT employee.Fname, employee.Minit, employee.Lname,
COUNT(works_on.Emp_ID) AS Num_projects
然后:
WHERE num_projects=6;
确保它
WHERE Num_projects=6;
如果您将AS定义为Num_projects,则where子句必须完全引用它作为Num_projects