SQL:如果存在 - >比较两个表并检查它们是否具有相同的行数
问题描述:
我处于我的SQL知识的末尾。我有问题,我想检查两个表是否具有相同的行数。SQL:如果存在 - >比较两个表并检查它们是否具有相同的行数
一个例子可能是我想向所有学校展示椅子数量相同的学生人数。我的伪代码如下所示:
SELECT * FROM schools WHERE
((SELECT COUNT(*) FROM students) = (SELECT COUNT(*) FROM chairs));
或用伪计算:students - chairs = 0;
SELECT * FROM schools WHERE
((SELECT COUNT(*) FROM students) - (SELECT COUNT(*) FROM chairs) = 0);
这样的结构与SQL可能,如果是这样如何?
答
你的做法似乎有点非正统的,但你可以用相关子查询做到这一点:
SELECT s.*
FROM schools s.
WHERE ((SELECT COUNT(*) FROM students st WHERE st.school_id = s.school_id) =
(SELECT COUNT(*) FROM chairs c WHERE c.school_id = s.school_id)
);
我会更倾向于做聚合后加入:
select st.school_id
from (SELECT st.school_id, COUNT(*) as cnt
FROM students st
GROUP BY st.school_id
) st JOIN
(SELECT c.school_id, COUNT(*) as cnt
FROM chairs c
GROUP BY c.school_id
) c
ON st.school_id = c.school_id AND st.cnt = c.cnt;
的两个版本微妙的不同。此版本只会返回至少有一名学生(和主席)的学校ID。
编辑:
我要指出的是,如果你只是想知道,如果两个表具有相同的行数,你可以返回在SELECT
一个布尔值:由于存在
SELECT ((SELECT COUNT(*) FROM chairs c) =
(SELECT COUNT(*) FROM students st)
) as num_rows_same_flag
尽管如此,我认为你想让每个学校的数字相同。
你好,戈登,谢谢你的回答,你帮了我很多了解。最后一句话:我只想向学校展示椅子和学生数量相同的学校。 – Martin
@Martin。 。 。这是我的预期。然而,你的问题的标题表明你指的是整个表格(不只是每个学校),所以我添加了编辑。 –
再次感谢您的帮助,我现在修改了我的代码,它的工作方式和预期的一样。 – Martin