問題是:爲不適用於任何項目的員工查找員工姓氏。
我的解決辦法是:
SELECT E.Lname
FROM EMPLOYEE E
WHERE E.Ssn NOT IN (SELECT *
FROM EMPLOYEE E,WORKS_ON W
WHERE E.Ssn = W.Essn);
這應該從works_on的essns員工減去核潛艇,不過,我不斷收到錯誤「操作數應包含1列」。這是什麼意思,我該如何糾正這段代碼?
問題是:爲不適用於任何項目的員工查找員工姓氏。
我的解決辦法是:
SELECT E.Lname
FROM EMPLOYEE E
WHERE E.Ssn NOT IN (SELECT *
FROM EMPLOYEE E,WORKS_ON W
WHERE E.Ssn = W.Essn);
這應該從works_on的essns員工減去核潛艇,不過,我不斷收到錯誤「操作數應包含1列」。這是什麼意思,我該如何糾正這段代碼?
試試這個
SELECT EMPLOYEE.Lname FROM EMPLOYEE WHERE EMPLOYEE.SSN NOT IN (SELECT DISTINCT WORKS_ON.Essn FROM WORKS_ON);
NOT IN子查詢的結果必須是一個值。您的子查詢將返回EMPLOYEE
和WORKS_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。
是什麼NOT IN的區別和NOT EXISTS又是什麼1這裏的意思? –
看看這個問題和答案:http://stackoverflow.com/questions/173041/not-in-vs-not-exists – bernie
@DanteGreyson *不存在*執行比* IN *更好。 – RubahMalam
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。
希望這說明您的問題
SELECT E.Lname
FROM EMPLOYEE E
WHERE E.Ssn NOT IN (SELECT distinct Essn
FROM WORKS_ON);
您沒有將表僱員連接到任何地方的表。這沒有必要嗎? –
因爲您的問題只能找到不適用於任何項目的員工的員工姓氏。 –