2013-08-16 5 views
0

я после двух таблицПолучить 1, если количество строк в одной таблице равно количеству строк в другой таблице

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 

Я хочу результат, чтобы вернуть 1 для class_id = 1 & 3 и 0 для class_id = 2, т.е. запрос должен возвращать 1, если количество строк в таблице a равно количеству строк в таблице b.

+0

могли бы вы пластинчатый свой результат, так что его легко интерпретировать? – Cris

+0

Я хочу, чтобы запрос к результату 1, когда я запускаю его для CLASS_ID = 1, не хочу, чтобы табличный результат всей таблицы – user2613027

ответ

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) 

Обратите внимание, что в этом запросе предполагается, что в таблицах отсутствуют идентификаторы классов. Если только один из них может отсутствовать некоторые идентификаторы class_ID, вы можете использовать LEFT или RIGHT JOIN, в зависимости от того, что это может быть (и использовать IFNULL(Xcount, 0) для подсчета из этой таблицы). Если какой-либо из них может отсутствовать, вам нужен ПОЛНЫЙ JOIN, но MySQL его не поддерживает. Если вы ищите SO, вы можете найти обходные решения.

Если вы просто хотите, чтобы сделать это для одного класса ID, в то время, это еще проще:

select (select count(*) from TableA where Class_ID = 1) = 
     (select count(*) from TableB where Class_Id = 1) as count_matches 
+0

спасибо за ответ ур, но мне не нужен результат для всей таблицы, но для определенного класса__type_ID – user2613027

+0

Затем введите WHERE в подзапросах. – Barmar

+0

Добавлен простой запрос для конкретного класса__и_ – Barmar