sql - 迷你数据库 - 子查询返回超过 1 个值

标签 sql sql-server database sql-server-2014

SELECT DISTINCT L.LecturerName
FROM Lecturer L
WHERE 5 > = 
(   SELECT  E.StudentID
    FROM    Class C, Enrolled E
    WHERE   C.ClassName = E.ClassName
    AND     C.LecturerID = L.LecturerID)

错误信息如下:-

Msg 512, Level 16, State 1, Line 1 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

有什么问题吗?

最佳答案

您需要在子查询中使用 COUNT(*)。此外,永远不要FROM 子句中使用逗号。 始终使用正确、明确的 JOIN 语法。

SELECT DISTINCT L.LecturerName
FROM Lecturer L
WHERE 5 >= (SELECT COUNT(*)
            FROM Class C JOIN
                 Enrolled E
                 ON C.ClassName = E.ClassName
            WHERE C.LecturerID = L.LecturerID
           );

我猜测 SELECT 中不需要 DISTINCT

您没有指定正在使用的数据库。更典型的是,您会将此信息放在 FROMSELECT 子句中,这样您就可以看到学生人数:

SELECT L.LecturerName, COUNT(*) as NumStudents
FROM Lecturer L JOIN
     Class C
     ON C.LecturerID = L.LecturerID JOIN
     Enrolled E
     ON C.ClassName = E.ClassName
GROUP BY L.LecturerName
HAVING COUNT(*) <= 5;

关于sql - 迷你数据库 - 子查询返回超过 1 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42741570/

相关文章:

mysql - 在一张表中按月份获取多个值的总和

sql - 比较两个表之间的字符串数据

mysql - 向 INNER JOIN SQL 查询添加附加列

javascript - 类似 Twitter 的推文框?

mysql - 许多表之一的外键?

c# - Entity Framework 不为表或过程生成类

c# - 在 C#.NET 应用程序中使用 SQL Server 时间数据类型?

sql-server - 查看哪个 SQL Server 数据文件中有哪些数据?

mysql - 为什么我无法在 mySQL 中创建/更新新条目?

php - 将JSON数组数据存储在MySQL数据库中可以吗?