SQL查询根据单独的查询结果联接多个表

时间:2018-11-28 22:18:20

标签: c# sql sql-server

我正在尝试寻找合适的SQL查询,以基于一个单独的查询将多个表连接在一起。

我查询“ Titles”表以获取“ TitleId”-然后,我需要查询“ Titles_Hardware”和“ Titles_Software”以将“ Title ID”与“ Hardware ID” /“ Software ID”进行匹配。

然后,我需要使用那些“硬件ID”和“软件ID”来查询“硬件”和“软件”表,以获取特定用户所需的硬件和软件的友好名称。

我尝试了子查询/交叉连接以及在此站点上发现的许多其他查询-似乎没有一个能满足我的需求。任何建议都绝对令人惊讶!

数据库概述(表以斜体显示)。

enter image description here

4 个答案:

答案 0 :(得分:1)

该查询应该执行您想要的操作,但是不清楚“根据一个单独的查询将多个表连接在一起。”的含义。在这里,我只是将所有内容都视为表格。

SELECT t.TitleName, t.TitleId, h.HardwareName, s.SoftwareName
FROM Titles t
INNER JOIN Title_Hardware th ON th.TitleId = t.TitleId
INNER JOIN Hardware h ON h.HardwareId = th.HardwareId
INNER JOIN Title_Software ts ON ts.TitleId = t.TitleId
INNER JOIN Software s ON s.SoftwareId = ts.SoftwareId
WHERE t.TitleId = 'bleh'

编辑

从评论中,您需要三个查询来获得所需的内容:

SELECT t.TitleName
FROM Titles t
WHERE t.TitleId = 'bleh'

SELECT h.HardwareName
FROM Titles t
INNER JOIN Title_Hardware th ON th.TitleId = t.TitleId
INNER JOIN Hardware h ON h.HardwareId = th.HardwareId
WHERE t.TitleId = 'bleh'

SELECT s.SoftwareName
FROM Titles t
INNER JOIN Title_Software ts ON ts.TitleId = t.TitleId
INNER JOIN Software s ON s.SoftwareId = ts.SoftwareId
WHERE t.TitleId = 'bleh'

答案 1 :(得分:1)

它应该只是一个简单的多级联接

SELECT TitleName, HardwareName, SoftwareName
FROM Titles
INNER JOIN Titles_Hardware
ON Titles.TitleId = Titles_Hardware.TitleId
INNER JOIN Titles_Software
ON Titles.TitleId = Titles_Software.TitleId
INNER JOIN Hardware
ON Hardware.HardwareId = Titles_Hardware.HardwareId
INNER JOIN Software
ON Software.SoftwareId = Titles_Software.SoftwareId
WHERE Titles.TitleId = {something}

答案 2 :(得分:1)

您应该能够使用一系列INNER JOIN来实现您的目标,例如:

select 
    t.titleName,
    h.hardwareName,
    s.softwareName
from titles t
inner join titles_hardware th on th.titleId = t.titleId
inner join hardware h on h.hardwareId = th.hardwareId
inner join titles_sotfware ts on ts.titleId = t.titleId
inner join software s on s.softwareId = ts.softwareId
where t.titleId = 'foo'

答案 3 :(得分:1)

也许UNION可以为您工作

DECLARE @TitleName VARCHAR(100) = 'The Boss Lady';

SELECT hard.HardwareName AS Name, 'hard' as TitleType, tit.TitleName
FROM Titles tit
JOIN Titles_Hardware tithard ON tithard.TitleId = tit.TitleId
JOIN Hardware hard ON hard.HardwareId = tithard.HardwareId
WHERE tit.TitleName = @TitleName

UNION ALL

SELECT soft.SoftwareName, 'soft', tit.TitleName
FROM Titles tit
JOIN Titles_Software titsoft ON titsoft.TitleId = tit.TitleId
JOIN Software soft ON soft.SoftwareId = titsoft.SoftwareId
WHERE tit.TitleName = @TitleName