mysql - SQL:存在的地方 -> 比较两个表并检查它们是否具有相同的行数

标签 mysql sql compare

我的 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/

相关文章:

mysql - 检查mysql中n个数字是否相等

python - 如何在python中合并pandas字符串(类似连接sql)?

mysql - SQL查询打破月末的预订日期?

swift - 在 Swift 3 中,比较两个闭包的方法是什么?

git - 是否无法将文件更改与 Visual Studio 2019 中的特定提交进行比较?

MySQL 查询 : Aggregation at two different level

MySQL 选择最新日期 - 单表

sql - PostgreSQL 查找周围的值

sql - 为什么使用 IS DISTINCT FROM - Postgres

汇编语言: printing lowercase to uppercase