2013-02-28 1 views
4

Я пытаюсь построить запрос, который сравнивает две таблицы с одинаковой структуройИспользования SQL для сравнения отсчетов идентификаторов из двух таблиц

Table 1: 
ID | Data 

Table 2: 
ID | Data 

ID является неоднозначной ключ (Data повторит, но ID | комбы данные являются уникальный). Мне нужен список идентификаторов, где COUNT из этих идентификаторов больше, в таблице 2, чем в таблице 1.

Так, например, если

Table 1 
a | data 
a | data1  
b | data2 

Table 2 
a | data 
a | data1 
b | data2 
b | data3 

будет генерировать выходной «б»

Это чувствует, что это должно быть легко, но моя голова сейчас скремблирована. Я делаю это в mysql, если это влияет на параметры.

ответ

3

Чтобы получить счетчик для каждого ключа,

select count(*) as count, ID from Table1 group by ID 

Таким образом, использовать это в качестве подзапроса в предложении FROM и объединения таблиц.

select tt1.ID 
from (select count(*) as count, ID from Table1 group by ID) tt1 
    inner join (select count(*) as count, ID from Table2 group by ID) tt2 
    on tt1.ID = tt2.ID 
where tt1.count < tt2.count 
+1

Позволяет ли mysql выбрать запрос, в котором вы ничего не выбираете? –

+0

Моя ошибка. Я отредактирую ответ. –

+0

Очень хороший ответ ... Он также решил мою проблему. Спасибо – Kishore

0

Протестировано в MySQL.

select case when count(d1.id) > count(d2.id) then d1.id end as 'id' from 
(select id from t1) d1, 
(select id from t2) d2 
group by d1.id 
+0

Мне тоже нравится это решение, так как раньше я не использовал select case в MySQL. Но это место позволяет мне выбрать один правильный ответ, а другой, как представляется, можно обобщить на большее количество ситуаций. –