Представление данных на трех таблицах в MySQL
Давайте предположим, что у меня есть три таблицы, такие как:
Таблица А
id | id_b | id_c
-----------------
1 | 1 | 2
2 | 2 | 1
3 | 1 | 2
4 | 2 | 3
5 | 3 | 3
6 | 2 | 1
Таблица Б
id | name
-----------------
1 | 'One'
2 | 'Two'
3 | 'Three'
Таблица С
id | name
-----------------
1 | 'Alpha'
2 | 'Beta'
3 | 'Charlie'
Что мне нужно, так это подсчет таблицы A на разных парах таблицы B и таблицы C, которая в этом примере выглядит следующим образом:
Результат
B | C | count(table_a)
-------------------------------------
'One' | 'Alpha' | 0
'One' | 'Beta' | 2
'One' | 'Charlie' | 0
'Two' | 'Alpha' | 2
'Two' | 'Beta' | 0
'Two' | 'Charlie' | 1
'Three' | 'Alpha' | 0
'Three' | 'Beta' | 0
'Three' | 'Charlie' | 1
Мне удалось отобразить строки с ненулевыми значениями, но я не могу отобразить остальные. Заранее спасибо за вашу помощь!
1 ответ
Вам нужно создать декартово объединение (все записи из обеих таблиц сопоставляются с каждой записью в другой таблице) между таблицами B и C, чтобы получить все возможные пары, а затем оставить объединение по содержимому таблицы A и группы по парам:
select b.name, c.name, count(a.id)
from (b join c)
left join a on b.id=a.id_b and c.id=a.id_c
group by b.name, c.name
Скобки вокруг b join c
гарантирует, что MySQL сначала создаст декартово соединение. Декартово соединение в MySQL может быть выполнено простым внутренним соединением без критерия соединения.