如何构造mysql命令以显示m:n关系的数据?
我可以使用join来显示1:n关系,但是当构造m:n关系时,会创建另一个表,当我尝试执行相同的操作时,它只显示一个表加上关系表。
例如,我有:
表格A:
A_id
A_data
表B:
B_id
B_data
表格C:
A_A_id
B_B_id
我可以显示表格,以便
A_id | A_data | A_A_id | B_B_id
有一些数据。
但我想要的格式是
A_id | A_data | B_id | B_data
其中A_id
对应于表C中的B_id
。
我正在通过外键引用,使用MySQL的InnoDB引擎。
感谢
答案 0 :(得分:2)
如果您希望C成为查询的基表(即基本上采用表C并添加相应的_data
行),您可以使用:
SELECT A.A_id, A.A_data, B.B_id, B.B_data
FROM C
LEFT JOIN A ON A.A_id = C.A_A_id
LEFT JOIN B ON B.B_id = C.B_B_id
这将表C和JOIN
用于其他两个表,使用C作为基表(因为LEFT JOIN
)。如果C中存在A或B中不存在的行,则只会获得_data
字段的相应NULL。
您可能希望查看各种联接(INNER, LEFT, RIGHT,...)以查看您想要的行为。
例如,您可能希望显示表A中存在的所有ID,即使它们不在C中(并且只显示相应B列的NULL)等等。