web-dev-qa-db-ja.com

複数のテーブルに基づいてSQL結果を選択する方法

他のいくつかのテーブルの特定の一致する値に基づいて、1つのテーブルから結果を選択する必要があります。次の表があります。

person: id, firstname, lastname
team: id, teamname
player: id, person_id(FK), team_id(FK)
coach: id, person_id(FK), team_id(FK)

各チームのコーチと選手の名前をすべて返す必要があります。私はこれまでに内部結合を使用したことがありますが、ここではそれらを使用できないようですので、これを行う方法はありますか?

25
cfrederich

これはあなたにコーチを与えます:

SELECT team.Teamname, person.Firstname, person.Lastname
FROM person
JOIN coach ON person.id = coach.person_id
JOIN team  ON coach.team_id = team.id

そして、これはプレイヤーに与えます:

SELECT team.Teamname, person.Firstname, person.Lastname
FROM person
JOIN player ON person.id = player.person_id
JOIN team  ON player.team_id = team.id

したがって、エレガントではない単純な答えは、UNIONと一緒に投げるだけです。

33

チームへの参加でORを使用するだけです

SELECT
     P.firstname,
     P.lastname,
     T.teamname
FROM
    person p id
    LEFT JOIN player pl
    ON p.id = pl.person_id
    LEFT JOIN coach c
    ON p.id = c.person_id
    LEFT JOIN team t
    ON pl.team_id = t.id
         or.c.team_id = t.id

または、データベースにCOALESCEがあるかどうかを確認する場合

   LEFT JOIN team t
        ON COALESCE(pl.team_id,c.team_id)  = t.id
3
Conrad Frix