繁体   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