我试图从连接表中选择所有Song1和Song2行,但我不想显示id号,而是想使用歌曲表将编号替换为歌曲的名称
这是我尝试过的东西,我得到了:
select Name,Name
from Connections
JOIN Songs
ON Songs.SongID = CAST(Connections.Song1 AS varchar)
JOIN Connections as Connections2
ON Songs.SongID = CAST(Connections2.Song2 AS varchar);
^这给了我两个相同的列,只显示歌曲6(因为它在歌曲1和歌曲2中都使用(
select Name from Songs
JOIN Connections
ON Songs.SongID = connections.Song1
select Name from Songs
JOIN Connections
ON Songs.SongID = connections.Song2
^上面的一个给出了Song1列的期望结果,下面的一个提供了Song2列的期望效果,但我不知道如何加入它们。
我正在使用Microsoft SQL Server Management Studio,并且是SQL 的新手
连接表:
歌曲1您想要两个联接:
select s1.Name, s2.Name
from connections c join
songs s1
on s1.SongID = c.song1 join
songs s2
on s2.SongId = c.song2;
以下内容适用于原始问题,经过编辑后,显然是一个提议。
您的数据模型和查询有点令人困惑:
- 为什么要将
song1
转换为字符串?这不应该是必要的。链接两个表的列应该具有相同的类型,并声明为外键 - 为什么称为
name
的列存储为数字
这些问题不需要回答。它们只是对数据设计的反馈。
下面的查询是针对MySQL的,我相信这也适用于MS SQL。我们在这里使用嵌套查询,嵌套查询的输出将给出SongId,以从SongTable中提取歌曲的名称。
select SongTable.Name from SongTable
where SongId in (select Song1,Song2 from ConnectionTable where ConnectionId="?");