2012-05-04 56 views
3

表:SQL查询 - 子查询返回不止一行

laterecords 
----------- 
studentid - varchar 
latetime - datetime 
reason - varchar 

我的查询:

SELECT laterecords.studentid, 
laterecords.latetime, 
laterecords.reason, 
(SELECT Count(laterecords.studentid) FROM laterecords 
     GROUP BY laterecords.studentid) AS late_count 
FROM laterecords 

我得到 “MySQL的子查询返回多行” 的错误。

我知道这个查询使用下面的查询解决方法:

SELECT laterecords.studentid, 
laterecords.latetime, 
laterecords.reason 
FROM laterecords 

然后使用PHP循环,虽然结果并做以下查询来获取late_count和echo出来:

SELECT Count(laterecords.studentid) AS late_count FROM laterecords 

但我认为可能有更好的解决方案?

回答

3

简单的解决方法是在你的子查询中添加WHERE条款:

SELECT 
    studentid, 
    latetime, 
    reason, 
    (SELECT COUNT(*) 
    FROM laterecords AS B 
    WHERE A.studentid = B.student.id) AS late_count 
FROM laterecords AS A 

一个更好的选择(在性能方面)是使用加入:

SELECT 
    A.studentid, 
    A.latetime, 
    A.reason, 
    B.total 
FROM laterecords AS A 
JOIN 
(
    SELECT studentid, COUNT(*) AS total 
    FROM laterecords 
    GROUP BY studentid 
) AS B 
ON A.studentid = B.studentid