将同一表中 2 列中的 id 替换为第二个表中的名称



我试图从连接表中选择所有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 的新手

连接表:

歌曲112345667

您想要两个联接:

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="?");

相关内容

最新更新