【问题标题】:Displaying m:n relationship in database在数据库中显示 m:n 关系
【发布时间】:2012-02-04 09:30:00
【问题描述】:

如何构造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 引擎通过外键引用来实现。

谢谢

【问题讨论】:

  • 请先格式化问题...
  • 3 个表之间的简单 INNER JOIN 不够吗? SELECT A.A_id, A.A_data, B.B_id, B.B_data FROM C JOIN B ON C.B_B_id = B.B_id JOIN A ON C.A_A_id = A.A_id

标签: mysql database syntax phpmyadmin


【解决方案1】:

如果您希望 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 和 JOINs 带到其他两个表,使用 C 作为基表(因为 LEFT JOIN)。如果 C 中存在 A 或 B 中不存在的行,则您只会为 _data 字段获得相应的 NULL。

您可能想查看各种联接 (INNER, LEFT, RIGHT,...) 以了解您想要什么行为。

例如,您可能希望显示表 A 中存在的所有 id,即使它们不在 C 中(并且只为相应的 B 列显示 NULL)等等。

【讨论】:

  • 谢谢。它可以很好地提取我需要的信息。我会调查的
猜你喜欢
  • 2021-09-16
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多