是否可以将多个具有一对多关系的表连接到主表,而无需重复记录?

5vf7fwbs  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(271)

人员表

+----+------+
| id | name |
+----+------+
|  1 | John |
+----+------+

汽车工作台

+----+----------+
| id | car      |
+----+----------+
|  1 | Audi     |
|  1 | BMW      |
|  1 | Mercedes |
+----+----------+

信用卡表

+----+-----------------+
| id | bank            |
+----+-----------------+
|  1 | Scotiabank      |
|  1 | Bank of America |
+----+-----------------+

id in person表是其他两个表的外键,我想知道是否有一种方法可以将这些表连接在一起而不显示重复的记录,如下所示:

+----+------+----------+-----------------+
| id | name | car      | bank            |
+----+------+----------+-----------------+
|  1 | John | Audi     | Scotiabank      |
|NULL| NULL | BMW      | Bank of America|
|NULL| NULL | Mercedes | NULL            |
+----+------+----------+-----------------+
zc0qhyus

zc0qhyus1#

你可以这样做,但你不应该。相反,我建议将所有值放在一行中:

select p.id, p.name,
       (select group_concat(c.car)
        from car c
        where c.id = p.id
       ) as cars,
       (select group_concat(b.bank)
        from banks b
        where b.id = p.id
       ) as banks
from person p ;

为什么不按指定的方式将结果放在多行中?当然,这是可能的。但是,行中的列应该彼此“相关”(这是“关系代数”中“关系”所讨论的内容)。将第一列替换为 NULL ,则它们与其余列不再有任何关系。类似地,最后两列中的值彼此无关。
另外,我猜上面的内容基本上就是你想要的。

相关问题