我试图为我的问题找到答案,但我找不到适合我的答案。因此,例如,我有2个表,分别是学生和测试。学生有2个字段student_id,名称和测试字段test_id和student_id。 我想做的是查询以打印出该学生所做的student_id,姓名和总测验。我失败的查询是
SELECT S.student_id, T.TOTAL
FROM students as S , ((SELECT student_id, COUNT(test_id) AS TOTAL
FROM tests
GROUP BY student_id) AS T)
WHERE S.student_id = T.student_id;
返回
第1行的错误1064(42000):您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第2行的“ AS T”附近使用
如何使别名选择的查询成为“临时表”以在另一个子查询中使用? 请给我最简单的答案以及MySQL中的高级答案,以便我可以比较这两个答案以供以后研究。谢谢
答案 0 :(得分:1)
没有真正的逗号分隔,并且显式地进行写联接。 我宁愿明确地将联接写得更清楚我在做什么,因为存在不同的联接类型doc。
显式加入
SELECT S.student_id, T.TOTAL
FROM students AS S
INNER JOIN (
SELECT student_id, COUNT(test_id) AS TOTAL
FROM tests GROUP BY student_id
) AS T ON S.student_id = T.student_id;
在选择中带有子查询
SELECT S.student_id, (SELECT COUNT(test_id) AS TOTAL
FROM tests
where tests.student_id = S.student_id
GROUP BY student_id) as Total
FROM students AS S;
随便(从子查询中删除了多余的花括号)
SELECT S.student_id, T.TOTAL
FROM students AS S , (SELECT student_id, COUNT(test_id) AS TOTAL
FROM tests
GROUP BY student_id) AS T
WHERE S.student_id = T.student_id;