Вы должны использовать 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
Объясняя идею:
- Получить все общее
id_file
s.
- Теперь объедините все
id_file
s из этих двух таблиц. Имейте в виду, что эта комбинация содержит все id_file
s из этих двух таблиц, как , хотя это отдельная таблица.
- Теперь получите только те
id_file
s со второго шага, которые находятся в на первом шаге.
- Осталось всего один шаг:
GROUP BY
& COUNT
. Я думаю вы хорошо знаете, что group by
Вы можете, пожалуйста, проверьте ваш ожидаемый результат? Почему '2' имеет счет' 4' в ожидаемом выходе? – 1000111
'| 14 | 3 | 'ожидается? Разве это не должно быть '| 14 | 5 | '? – 1000111
Да, вы правы, это должно быть 5 –