SQL联接不起作用(零记录返回)?

SQL联接不起作用(零记录返回)?,sql,Sql,我在一篇教程中发现了这个问题 Emp( eid: integer, ename: string, age: integer, salary: real) Works( eid: integer, did: string, pct-time: integer) Dept( did: string, budget: real, managerid: integer) 由于这个问题,员工可以在许多部门工作。用于映射员工和部门的工作表。工作关系的pct_时间字段显示给定员工在给定部门工作的时间百分比

我在一篇教程中发现了这个问题

Emp( eid: integer, ename: string, age: integer, salary: real)
Works( eid: integer, did: string, pct-time: integer)
Dept( did: string, budget: real, managerid: integer)
由于这个问题,员工可以在许多部门工作。用于映射员工和部门的工作表。工作关系的pct_时间字段显示给定员工在给定部门工作的时间百分比

然后要求打印在硬件和软件部门工作的每位员工的姓名和年龄。

为此,我编写了以下SQL,但它不起作用?有人能解释一下这个问题吗

SELECT Emp.ename, Emp.age
FROM Emp
JOIN Works ON Works.eid = Emp.eid
WHERE Works.did = 'Hardware' AND Works.did = 'Software'

在单个记录中,
起作用。did
不能同时是硬件和软件。因此,您需要对数据进行分组,筛选
有效。您是否查找了两个都有效的组,然后只选择了
有效的组。是否

SELECT Emp.ename, Emp.age
FROM Emp
JOIN Works ON Works.eid = Emp.eid
WHERE Works.did IN ('Hardware', 'Software')
GROUP BY Emp.ename, Emp.age
HAVING count(Works.did) = 2

在单个记录中,
起作用。did
不能同时是硬件和软件。因此,您需要对数据进行分组,筛选
有效。您是否查找了两个都有效的组,然后只选择了
有效的组。是否

SELECT Emp.ename, Emp.age
FROM Emp
JOIN Works ON Works.eid = Emp.eid
WHERE Works.did IN ('Hardware', 'Software')
GROUP BY Emp.ename, Emp.age
HAVING count(Works.did) = 2
希望有助于:

SELECT Emp.ename, Emp.age
FROM Emp
INNER JOIN Works AS W1 ON W1.eid = Emp.eid
INNER JOIN Works AS W2 ON W2.eid = Emp.eid
WHERE W1.did = 'Hardware' 
AND W2.did = 'Software'
希望有助于:

SELECT Emp.ename, Emp.age
FROM Emp
INNER JOIN Works AS W1 ON W1.eid = Emp.eid
INNER JOIN Works AS W2 ON W2.eid = Emp.eid
WHERE W1.did = 'Hardware' 
AND W2.did = 'Software'
试试这个

SELECT Emp.ename, Emp.age
FROM Emp
JOIN Works ON Works.eid = Emp.eid
WHERE Works.did IN ('Hardware', 'Software')
GROUP BY 1,2
HAVING count(distinct Works.did) = 2
试试这个

SELECT Emp.ename, Emp.age
FROM Emp
JOIN Works ON Works.eid = Emp.eid
WHERE Works.did IN ('Hardware', 'Software')
GROUP BY 1,2
HAVING count(distinct Works.did) = 2

下次你提问时,请不要使用“不起作用”这个词。请解释您的预期和实际发生的情况(即未返回任何记录)@Nick.McDermaid谢谢您的建议,我已更新了问题主题。下次您提问时,请不要使用“未工作”字样。请解释您的预期和实际发生的情况(即未返回任何记录)@Nick.McDermaid谢谢您的建议,我已更新了问题主题。无需使用count distinct,即
拥有count(distinct Works.did)=2
?我怀疑员工可以在软件部门工作2次无需使用count distinct,也就是说,
拥有count(distinct Works.did)=2
?我怀疑一名员工可能在软件部门有2次不工作,这是一条错误消息“每个GROUP BY表达式必须包含至少一个非外部引用的列”。1,2将仅在MySQL中工作。如果您使用的是sqlserver,请将1,2替换为Emp.ename,Emp.ageNot working,这是错误消息“每个GROUP BY表达式必须至少包含一个非外部引用的列”。1,2仅在MySQL中有效。如果您使用的是sqlserver,请将1,2替换为Emp.ename、Emp.age