SQL 通过 3 个不同的表连接

Posted

技术标签:

【中文标题】SQL 通过 3 个不同的表连接【英文标题】:SQL Join Through 3 Different Tables 【发布时间】:2019-03-13 14:29:01 【问题描述】:

大家好,我有一个 SQL 语句,我真的很努力。我基本上是在尝试在 vb.net 中创建一个媒体播放器,并设置一个表结构如下-

SONGS_DB- Song_ID、Song_Name

歌曲播放列表 Song_playlist_id、Song_id、Playlist_ID

播放列表 播放列表_ID、播放列表名称

我面临的问题是显示某个播放列表中的所有歌曲,因为它需要遵循 3 个表之间的链。我目前有一个组合框设置显示播放列表的所有名称,当我的组合框中的选定索引发生更改时,我希望我的 datagridviewer 显示选定播放列表名称中的所有歌曲名称。

这基本上是我拥有的所有代码,因为我什至不知道从哪里开始 -

 Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    Dim con As New SqlConnection With .ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\coolj\OneDrive\Documents\Loop\Loop\Songs_SQL.mdf;Integrated Security=True"
    Dim cmd As New SqlCommand("SELECT SONG_ID, SONG_NAME FROM SONGS_DB WHERE SONG_ID IN (SELECT SONG_ID FROM SONG_PLAYLIST WHERE PLAYLIST_ID IN (SELECT PLAYLIST_ID FROM Playlist WHERE PLAYLIST_NAME = (@NAME)", con)
    cmd.Parameters.AddWithValue("@NAME", ComboBox1.SelectedIndex)

End Sub

感谢所有帮助 x

【问题讨论】:

您的组合框不包含Playlist_ID 值吗?那比名字更适合搜索。但无论哪种方式,您的 Select 语句都缺少 2 个右括号。并尝试根据 Arnaud 的以下答案合并表 JOIN 谢谢 没看到!然而,我现在收到此错误 - 将 nvarchar 值“Party Hits”转换为数据类型 int 时转换失败。 (Party Hits 是播放列表名称之一),您知道为什么会发生这种情况吗? 【参考方案1】:

在 SQL 中,您可以使用子句 JOIN 连接表。这是您需要的:

SELECT S.Song_Name, P.Playlist_Name
FROM SONGS_DB AS S
JOIN SONG_PLAYLIST AS SP
    ON S.Song_ID = SP.Song_ID
JOIN PLAYLIST AS P
    ON P.Playlist_ID = SP.Playlist_ID

【讨论】:

第一个Join应该是S.Song_ID = SP.Song_ID 真的,非常喜欢!

以上是关于SQL 通过 3 个不同的表连接的主要内容,如果未能解决你的问题,请参考以下文章

MySQL学习——SQL查询语句(连接查询&子查询)

SQL 查询连接来自不同 fdb 数据库的表

表连接 SQL

Sql:如何仅使用 ID 连接表

MongoDB中的3个表连接

Presto SQL - 两个完全不同的表连接平行而不是垂直