MySQL 中三个表的数据表示
Data representation on three tables in MySQL
假设我有三个 table,例如:
Table一个
id | id_b | id_c
-----------------
1 | 1 | 2
2 | 2 | 1
3 | 1 | 2
4 | 2 | 3
5 | 3 | 3
6 | 2 | 1
Table B
id | name
-----------------
1 | 'One'
2 | 'Two'
3 | 'Three'
Table C
id | name
-----------------
1 | 'Alpha'
2 | 'Beta'
3 | 'Charlie'
我需要的是 table A 在 table B 和 table 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
我设法显示了非零行,但无法显示其他行。
预先感谢您的帮助!
您需要在 tables B 和 C 之间创建笛卡尔连接(两个 tables 中的所有记录都映射到另一个 table 中的每个记录)以获得所有可能的对,然后左加入 table 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 中的笛卡尔连接可以通过没有连接条件的简单内部连接来完成。
假设我有三个 table,例如:
Table一个
id | id_b | id_c
-----------------
1 | 1 | 2
2 | 2 | 1
3 | 1 | 2
4 | 2 | 3
5 | 3 | 3
6 | 2 | 1
Table B
id | name
-----------------
1 | 'One'
2 | 'Two'
3 | 'Three'
Table C
id | name
-----------------
1 | 'Alpha'
2 | 'Beta'
3 | 'Charlie'
我需要的是 table A 在 table B 和 table 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
我设法显示了非零行,但无法显示其他行。 预先感谢您的帮助!
您需要在 tables B 和 C 之间创建笛卡尔连接(两个 tables 中的所有记录都映射到另一个 table 中的每个记录)以获得所有可能的对,然后左加入 table 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 中的笛卡尔连接可以通过没有连接条件的简单内部连接来完成。