以下T-SQL查询有什么问题

时间:2017-11-20 03:25:45

标签: sql sql-server tsql subquery

我需要针对EMP表编写一个查询,该表使用WHERE子句中的子查询返回具有SALESMAN和MANAGER作业的Employees的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");

3 个答案:

答案 0 :(得分:1)

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 :(得分:0)

您正在使用带有子查询的=。子查询只能返回一列 - SQL Server不支持这种比较的元组。

这不是你想做的吗?

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

WHERE子句中不需要子查询。根本没有必要。

答案 2 :(得分:0)

它有两种选择:

1.您可以替换' ='与' IN' as' ='(等于)只期望一个值,但在您的情况下,有多个值。

所以你的查询应该是:

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一起使用。

    SELECT *     来自SCOTT.emp     在哪里SCOTT.emp.job =" SALESMAN"或者SCOTT.emp.job =" MANAGER";

相关问题