我的 SQL 知识已经结束了。我有一个问题,我想检查两个表是否存在相同的行数。
举个例子,我想向所有学校展示椅子数量与学生数量相同的学校。我的伪代码如下所示:
SELECT * FROM schools WHERE
((SELECT COUNT(*) FROM students) = (SELECT COUNT(*) FROM 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
中返回一个 bool 值:
SELECT ( (SELECT COUNT(*) FROM chairs c) =
(SELECT COUNT(*) FROM students st)
) as num_rows_same_flag
但是,由于 schools
表的存在,我假设您希望每个学校的编号相同。
关于mysql - SQL:存在的地方 -> 比较两个表并检查它们是否具有相同的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46745275/