下面的T-SQL查询有什么问题

下面的T-SQL查询有什么问题,sql,sql-server,tsql,subquery,Sql,Sql Server,Tsql,Subquery,我需要对EMP表编写一个查询,该表使用WHERE子句中的子查询返回员工的EMPNO、ENAME和JOB值 我有这个,但得到的错误值太多。我不确定额外的值在哪里。如果能得到任何帮助,我将不胜感激 SELECT * FROM SCOTT.emp WHERE SCOTT.emp.job=(SELECT SCOTT.emp.empno, SCOTT.emp.ename, SCOTT.emp.job FROM SCOTT.emp

我需要对EMP表编写一个查询,该表使用WHERE子句中的子查询返回员工的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");
您正在将=与子查询一起使用。子查询只能返回一列-SQL Server不支持用于此类比较的元组

这不是你想要的吗

SELECT e.*
FROM SCOTT.emp e
WHERE e.job IN ('SALESMAN', 'MANAGER');

WHERE子句中不需要子查询。这根本不是必需的。

有两种选择:

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");
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");
如果要使用“=”,请将其与或一起使用

挑选* 来自SCOTT.emp 其中SCOTT.emp.job=推销员或SCOTT.emp.job=经理


应使用IN而不是equals。。equals将从子查询中仅期望一个值。存在两个选项1/2我应该在哪里使用它而不是相等?我理解这一点。但是,我正在尝试了解子查询。因此,我需要子查询。@JustinRoohparvar。在需要或适当的上下文中了解子查询。知道何时不使用子查询与知道何时使用子查询一样重要。不要在where子句中使用子查询,而是使用select子句。那是合适的。大多数情况下,在where子句中使用或存在。