簡體   English   中英

以下T-SQL查詢有什么問題

[英]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");
  1. 如果要使用“ =”,則將其與OR一起使用。

    從SCOTT.emp那里選擇* SCOTT.emp.job =“ SALESMAN”或SCOTT.emp.job =“ MANAGER”;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM