我有以下两个表
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。
答案 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