0

我有以下两张表

table a->
Class_ID  |  name  | class
1         |  abc   | a
1         |  def   | a
2         |  ghi   | b
2         |  jkl   | b
2         |  mno   | b
3         |  pqr   | c
3         |  stu   | c

table b->
Class_ID  |  class
1         |  a
1         |  a
2         |  b
2         |  b
3         |  c
3         |  c

我希望结果为 CLASS_ID = 1 & 3 返回 1,为 CLASS_ID = 2 返回 0,即如果表 a 中的行数等于表 b 中的行数,则查询应返回 1。

4

1 回答 1

1
select Class_ID, acount = bcount as count_matches
from (select Class_ID, COUNT(*) acount
      from TableA
      group by Class_ID) a
JOIN (select Class_ID, COUNT(*) acount
      from TableB
      group by Class_ID) b
USING (Class_ID)

请注意,此查询假定表中没有丢失的类 ID。如果其中只有一个可能缺少一些 class_ID,您可以使用 LEFT 或 RIGHT JOIN,这取决于它可能是(并IFNULL(Xcount, 0)用于该表的计数)。如果其中任何一个可能缺少一些,则需要 FULL JOIN,但 MySQL 不支持它。如果您搜索 SO,您可以找到解决方法。

如果您只想一次为一个类 ID 执行此操作,则更简单:

select (select count(*) from TableA where Class_ID = 1) =
       (select count(*) from TableB where Class_Id = 1) as count_matches
于 2013-08-16T04:55:50.960 回答