加入多个表并显示从 id 链接的所有名称
Posted
技术标签:
【中文标题】加入多个表并显示从 id 链接的所有名称【英文标题】:Joining multiple tables and display all names linked from id 【发布时间】:2018-03-20 04:38:06 【问题描述】:我已经使用我学到的正常形式重建了我的数据库,但现在我无法将它们与所有表重新组合在一起。
我有一个歌曲数据库,表的连接是这样链接的:
songs artists song_vocals song_composers
--------------------------------------------------------------------
song_id artist_id song_id song_id
title artist_name artist_id artist_id
有多个表,其外键指向艺术家表。
我想用这样的名字显示所有信息,我不想通过 id 显示它们:
song_id title vocal composer
--------------------------------------------------------
1 ABC John Cat
到目前为止,我能做的最好的事情就是加入 3 个表,这只会给我 song_id、title 和 vocal:
SELECT songs.song_id, songs.title, artists.artist_name as vocal FROM songs
LEFT JOIN song_vocals ON
song_vocals.song_id = songs.song_id
left join artists ON
song_vocals.artist_id = artists.artist_id
我怎样才能加入更多?
【问题讨论】:
【参考方案1】:如果您还没有这样做,您可以为作曲家创建一个表,并将外键添加到您的 song_vocals 表中,无论如何,从您的语句中该表就是您的主表。然后,您可以在艺术家之后向作曲家表添加另一个左连接,但不要忘记将 composers.composer_name (我假设)也放在您的 select 语句中。
【讨论】:
song_composers 表已经创建,它引用了艺术家表的名称。如果我要创建另一个作曲家表来存储名称,那么这将是名称的冗余问题,因为我已经将它们存储在艺术家表中。 您仍然可以将作曲家表与艺术家表左连接,但在 select 语句中为名称提供不同的别名,这样您就不会感到困惑。您还可以通过创建名称表并将名称 id 存储在艺术家和作曲家表中来进一步规范艺术家表,这样您最终会得到 2 个引用名称表的联结表,但这可能会适得其反,因为我们没有了解您的情况和数据库架构的全貌。【参考方案2】:song_vocals 和 song_composer 表有什么区别
【讨论】:
song_vocals 存储歌曲的歌手,而 song_composer 存储歌曲的作曲家。可以有多个歌手演唱同一首歌,也可以有多个作曲家写一首歌。【参考方案3】:SELECT
songs.title as SongTitle,
a1.artist_name as Vocal,
a2.artist_name as Composer
FROM songs
left join song_vocals ON song_vocals.song_id = songs.song_id
left join artists a1 ON song_vocals.artist_id = a1.artist_id
left join song_composers on songs.song_id = song_composers.song_id
left join artists a2 on a2.artist_id = song_composers.artist_id
这是您应该使用的代码块。 如果您有两个或多个指向某个表的链接,并且使用 ALIAS,则可以多次使用该表。 在你的前任。 "a1","a2" 是你的别名
【讨论】:
谢谢它的工作。我还有一个问题,比如多位歌手演唱的歌曲,现在选择多行显示,怎么合并成一行? 为此,您需要使用动态 sql,以便您可以一个接一个地添加名称,举一个小例子,您必须编写一个查询,如 @vocal = @vocal+' '+@vocal2跨度>以上是关于加入多个表并显示从 id 链接的所有名称的主要内容,如果未能解决你的问题,请参考以下文章