2016-08-22 2 views
-4

У меня есть эти две MySQL таблицыCOUNT несколько записей из разных таблиц MYSQL

main_date_family

enter image description here

main_date_non_family

enter image description here

Я хочу CoU нт дублировать записи из двух таблиц, как этот

--------------------- 
| id_file | c | 
--------------------- 
| 1  | 3 | 
| 6  | 2 | 
| 14  | 5 | 
+0

Вы можете, пожалуйста, проверьте ваш ожидаемый результат? Почему '2' имеет счет' 4' в ожидаемом выходе? – 1000111

+0

'| 14 | 3 | 'ожидается? Разве это не должно быть '| 14 | 5 | '? – 1000111

+0

Да, вы правы, это должно быть 5 –

ответ

2

Вы должны использовать UNION ALL для достижения выхода:

SELECT 
t.id_file, 
COUNT(*) AS c 
FROM 
(
    SELECT id_file FROM main_date_family 

    UNION ALL 

    SELECT id_file FROM main_date_non_family 
) AS t 
GROUP BY t.id_file 

EDIT:

SELECT 
t.id, 
COUNT(t.id) AS c 
FROM 
(
    SELECT id_file AS id FROM main_date_family 

    UNION ALL 

    SELECT id_file FROM main_date_non_family 
) AS t 
WHERE t.id IN (SELECT A.id_file 
     FROM main_date_family A 
     INNER JOIN main_date_non_family B ON A.id_file = B.id_file 
) 
GROUP BY t.id 

Объясняя идею:

  1. Получить все общее id_file s.
  2. Теперь объедините все id_file s из этих двух таблиц. Имейте в виду, что эта комбинация содержит все id_file s из этих двух таблиц, как , хотя это отдельная таблица.
  3. Теперь получите только те id_file s со второго шага, которые находятся в на первом шаге.
  4. Осталось всего один шаг: GROUP BY & COUNT. Я думаю вы хорошо знаете, что group by
+0

Большое спасибо, но мне нужны записи, которые существуют в двух таблицах, если одна запись существует в одной таблице, но не в другой, мне она не нужна. –

+0

Но ваше первоначальное требование не говорило об этом. Хорошо, я использую время, чтобы изменить запрос. – 1000111

+0

Посмотрите ответ в разделе редактирования. – 1000111

Смежные вопросы