如果一个表中的行数等于其他表中的行数,则获取1

时间:2013-08-16 04:48:54

标签: mysql

我有以下两个表

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&返回1对于CLASS_ID = 2,3和0,即如果表a中的行数等于表b中的行数,则查询应返回1。

1 个答案:

答案 0 :(得分: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