[英]What is wrong with the following T-SQL query
我需要針對一個EMP表編寫一個查詢,該查詢使用WHERE子句中的子查詢返回具有SALESMAN和MANAGER作業的雇員的EMPNO,ENAME和JOB值。
我有這個,但出現錯誤“值太多”。 我不確定額外的值在哪里。 我可以從中獲得任何幫助,將不勝感激。
SELECT *
FROM SCOTT.emp
WHERE SCOTT.emp.job=(SELECT SCOTT.emp.empno, SCOTT.emp.ename, SCOTT.emp.job
FROM SCOTT.emp
WHERE SCOTT.emp.job="SALESMAN" OR SCOTT.emp.job="MANAGER");
SELECT *
FROM SCOTT.emp
WHERE SCOTT.emp.job in(SELECT SCOTT.emp.job
FROM SCOTT.emp
WHERE SCOTT.emp.job="SALESMAN" OR SCOTT.emp.job="MANAGER");
您正在將=
與子查詢一起使用。 子查詢只能返回一列-SQL Server不支持元組進行此類比較。
這不是您想要的嗎?
SELECT e.*
FROM SCOTT.emp e
WHERE e.job IN ('SALESMAN', 'MANAGER');
WHERE
子句中不需要子查詢。 根本沒有必要。
有兩種選擇:
1.您可以將“ =”替換為“ IN”,因為“ =”(等於)僅期望一個值,但在您的情況下,存在多個值。
因此您的查詢應為:
SELECT *
FROM SCOTT.emp
WHERE SCOTT.emp.job IN (SELECT SCOTT.emp.empno, SCOTT.emp.ename, SCOTT.emp.job
FROM SCOTT.emp
WHERE SCOTT.emp.job="SALESMAN" OR SCOTT.emp.job="MANAGER");
或如某人的回答中所述,無需在您的情況下直接使用子查詢
SELECT *
FROM SCOTT.emp
WHERE SCOTT.emp.job in ("SALESMAN","MANAGER");
如果要使用“ =”,則將其與OR一起使用。
從SCOTT.emp那里選擇* SCOTT.emp.job =“ SALESMAN”或SCOTT.emp.job =“ MANAGER”;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.