【问题标题】:Replacing id's in 2 columns from same table with names from second table用第二个表中的名称替换同一表中 2 列中的 id
【发布时间】:2021-09-18 16:29:21
【问题描述】:

我正在尝试从我的 Connections 表中选择所有 Song1 和 Song2 行,但我不想显示 ID 号,而是想使用我的 Songs 表将数字替换为歌曲的名称

这是我尝试过和得到的东西:

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);

^ 这给了我 2 个相同的列,只显示第 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 新手

连接表:

Song1 Song2
1 2
3 4
5 6
6 7

歌曲表:

SongId Name
1 Turning Back
2 Reason
3 Solar System
4 Generator
5 Siren
6 Circles
7 Bunker

前 4 行的期望输出为:

Song1 Song2
Turning Back Reason
Solar System Generator
Siren Circles
Cirles Bunker

【问题讨论】:

  • 消耗品样本数据(不是图片)、预期结果,您的尝试将帮助我们帮助您。
  • 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,这些无法通过文本准确描述的事情。请展示您尝试过的内容,并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。
  • 我已将示例数据转换为表格,获得了预期/期望的结果并放入了我尝试过的东西。很抱歉没有遵循指南,第一次在这里发帖

标签: sql sql-server tsql join


【解决方案1】:

下面的查询是针对 MySQL 的,我相信这也适用于 MS SQL。我们这里使用的是嵌套查询,嵌套查询的输出会给出 SongId 来从 SongTable 中提取歌曲的名称。

select SongTable.Name from SongTable
where SongId in (select Song1,Song2 from ConnectionTable where ConnectionId="?");

【讨论】:

  • 我得到一个错误,“当子查询没有用 EXISTS 引入时,只能在选择列表中指定一个表达式” 如果工作正常,事情查询也会给我整个表或一个结果?因为我需要显示整个表格
【解决方案2】:

你想要两个连接:

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 的列存储为数字?

这些问题不需要回答。它们只是对数据设计的反馈。

【讨论】:

  • 我在cs.Namecn.Name 上都收到了invalid column name 'Name' 错误,很抱歉与表格混淆。我把名字弄混了,上表是连接表,下表是歌曲表。我现在正在修复它。这可能是您建议的查询不起作用的原因。再次抱歉
  • @BlazeBoss3412 。 . .我认为查询是正确的,因为您最初提出了您的问题。我更新了答案以反映您更明智的数据模型。
猜你喜欢
  • 2019-10-12
  • 2012-04-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 2015-05-12
  • 2021-04-14
相关资源
最近更新 更多