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 个不同的表连接的主要内容,如果未能解决你的问题,请参考以下文章