5

2 つのテーブルを結合して結合し、その結合されたテーブルを使用して 3 番目のテーブルを結合する 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 が必要です。関係は 3 番目のテーブル 'tTaxonomy' に保持されます。

4

3 に答える 3

5

あなたはほとんどそれを持っていますが、ON句の2番目の結合インセットにはエイリアスと句が必要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
于 2012-10-01T17:46:39.373 に答える
2
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.MissionID
left outer join tTaxonomy t on t.Tier1Mission = m.name and t.Tier2Activity = a.name
于 2012-10-01T17:46:55.717 に答える
1

あなたは近くにいたようですJOIN.最後の構文が間違った場所にありましたJOIN:

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 = MissionID
LEFT OUTER JOIN
(
    SELECT *
    FROM tTaxonomy
) t
    on m.name = t.Tier1Mission
    AND a.name = t.Tier2Activity

あるいは:

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 = MissionID
LEFT OUTER JOIN tTaxonomy t
    on m.name = t.Tier1Mission
    AND a.name = t.Tier2Activity
于 2012-10-01T17:46:48.700 に答える