mysql - MySQL中三张表的数据表示

标签 mysql join count multiple-tables

假设我有三个表,例如:

表A

id | id_b | id_c
-----------------
1  |   1  |  2
2  |   2  |  1
3  |   1  |  2
4  |   2  |  3
5  |   3  |  3
6  |   2  |  1

表B

id | name
-----------------
1  | 'One'
2  | 'Two'
3  | 'Three'

表C

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

我设法显示了非零行,但无法显示其他行。 预先感谢您的帮助!

最佳答案

您需要在表 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 中的笛卡尔连接可以通过没有连接条件的简单内部连接来完成。

关于mysql - MySQL中三张表的数据表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44256772/

相关文章:

mysql - 如何将MySQL表和记录导入MS-SQL?

mysql - 部分查询的错误消息 :Either list of columns or a custom serializer should be specified

mysql - 用主键替换外键

python - pandas 计算列中相同元素的数量,如果数量很小则删除

algorithm - 找出包含 1 和 0 一样多的最长子序列 O(n)

mysql - 如何在 MySQL 中将现有列更改为默认插入时的当前时间?

mysql - 避免 mysql 文件排序

sql - 在查询中连接复合外键/主键列的表

mysql - 如何计算 Talend on Oracle 中连接的行数

计算字符串的单词