MySQL:使用" NOT IN"条款正确

时间:2016-03-01 04:07:48

标签: mysql sql database

enter image description here

问题是:找到不参与任何项目的员工的员工姓氏。

我的解决方案是:

SELECT E.Lname 
FROM EMPLOYEE E
WHERE E.Ssn NOT IN (SELECT * 
                    FROM EMPLOYEE E,WORKS_ON W
                    WHERE E.Ssn = W.Essn);

这应该从WORK_on中减去雇员的ssns,但是我不断收到错误"操作数应该包含1列"。这意味着什么?如何更正此代码?

4 个答案:

答案 0 :(得分:1)

NOT IN子查询的结果必须是一个值。您的子查询返回EMPLOYEEWORKS_ON表中的所有列。您可以改为使用NOT EXISTS:

SELECT E.Lname 
FROM EMPLOYEE E
WHERE NOT EXISTS (SELECT 1 
                  FROM WORKS_ON W
                  WHERE E.Ssn = W.Essn);

1可以是任何标量,也可以是NULL。

答案 1 :(得分:1)

SELECT E.Lname 
FROM EMPLOYEE E
WHERE E.Ssn NOT IN (SELECT E.Ssn 
                    FROM EMPLOYEE E,WORKS_ON W
                    WHERE E.Ssn = W.Essn);

不在,表示不包含其他值集。 因此,在下一个查询中,它应该选择值集。

SELECT E.Ssn 
FROM EMPLOYEE E,WORKS_ON W
WHERE E.Ssn = W.Essn

此部分将返回所有已工作的员工SSN。

希望它能解释你的问题

答案 2 :(得分:1)

SELECT E.Lname 
FROM EMPLOYEE E
WHERE E.Ssn NOT IN (SELECT distinct Essn 
                    FROM WORKS_ON);

答案 3 :(得分:1)

试试这个

SELECT EMPLOYEE.Lname FROM EMPLOYEE WHERE EMPLOYEE.SSN NOT IN (SELECT DISTINCT WORKS_ON.Essn FROM WORKS_ON);