我有一个 SQL 查询,我想将两个表连接在一起,然后使用该连接表连接第三个表。我试着用谷歌搜索如何做到这一点,但它的措辞很尴尬,没有发现任何有用的东西。这是我尝试使用的代码:
SELECT t.id AS ID
, a.id AS ActivityID
, t.ProjectType AS ProjectType
, t.Tier1Mission AS Mission
, m.id ASMissionID
, m.name AS MissionName
, t.Tier2Activity AS Activity
, a.name AS ActivityName
, t.Tier3Project AS Project
FROM tActivity a
INNER JOIN
(SELECT id, name FROM tMission) m
ON tActivity.missionId = MissionID
LEFT OUTER JOIN
(SELECT *
FROM tTaxonomy
WHERE Tier1Mission = m.name AND Tier2Activity = a.name)
编辑: 我遇到的主要问题是 tActivity 表中的条目具有相同的“名称”但引用不同的 MissionId。加入所有表很容易,但需要有正确的 MissionID,关系保存在第三个表“tTaxonomy”中。
最佳答案
您几乎已经做到了,但是您需要一个别名和一个 ON
子句用于您的第二个连接 insetad WHERE
子句。此外,在您的第一个 ON
子句中,使用表别名 a
而不是原始名称。
SELECT t.id AS ID
, a.id AS ActivityID
, t.ProjectType AS ProjectType
, t.Tier1Mission AS Mission
, m.id ASMissionID
, m.name AS MissionName
, t.Tier2Activity AS Activity
, a.name AS ActivityName
, t.Tier3Project AS Project
FROM
tActivity a
INNER JOIN
(SELECT id, name FROM tMission) m
ON a.missionId = m.id
LEFT OUTER JOIN
(SELECT *
FROM tTaxonomy
) t ON t.Tier1Mission = m.name AND t.Tier2Activity = a.name
但是,仔细查看一下,我发现没有任何东西需要使用连接子查询。子查询中没有聚合或限制需要它们。您可以只使用普通表连接:
SELECT t.id AS ID
, a.id AS ActivityID
, t.ProjectType AS ProjectType
, t.Tier1Mission AS Mission
, m.id ASMissionID
, m.name AS MissionName
, t.Tier2Activity AS Activity
, a.name AS ActivityName
, t.Tier3Project AS Project
FROM
tActivity a
INNER JOIN tMission m ON a.missionId = m.id
LEFT JOIN tTaxonomy t ON t.Tier1Mission = m.name AND t.Tier2Activity = a.name
关于sql - 连接两个表,然后连接第三个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12678250/