在数据库中显示m:n关系

时间:2012-02-04 09:30:01

标签: mysql database syntax phpmyadmin

如何构造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引擎。

感谢

1 个答案:

答案 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)等等。