2017-11-20 3 views
0

これは宿題に関する質問です。複数のテーブルに自然に結合した後にグループ化する方法

私はテーブルのチームがあります。

teamid | teamcity | name 

テーブルゲーム:

gameid | date | gamecity 

とテーブルは、私が何をしようとしている

gameid | teamid | teamscore 

をgames_playedは唯一の選択でありますどちらのチームの都市も試合に出場していない都市で行われているゲーム。

例えば、トロント・ラプターズとシカゴ・ブルズがニューヨークでゲームをした場合、それが選択されます。

私はそれを含めて、いくつかの異なる方法で試してみた:

WITH TEMP as (SELECT * FROM GAME NATURAL JOIN 
GAME_PLAYED NATURAL JOIN TEAM WHERE teamcity != gamecity) 
SELECT gameid, gamecity, teamcity, teamname, teamscore FROM TEMP GROUP BY 
gameid, gameid HAVING COUNT(gameid) > 1; 

と:

SELECT gameid, gamecity, teamcity, teamname, teamscore FROM GAME 
NATURAL JOIN GAME_PLAYED NATURAL JOIN TEAM WHERE teamcity != gamecity 
GROUP BY gameid HAVING COUNT(gameid) > 1; 

私はここから行くのはどこ本当にわからないが。最後の1つは私にエラーです: "column" teams.teamcityはGROUP BY句に現れなければならないか、集約関数で使わなければなりません "。

答えて

0

私はそれを考え出した:あなたはこの答えを受け入れることができ

SELECT gameid, gamecity, teamcity, teamname, teamscore FROM GAME_PLAYED 
NATURAL JOIN GAME NATURAL JOIN TEAM WHERE gameid IN 
(SELECT gameid FROM GAME NATURAL JOIN GAME_PLAYED NATURAL JOIN TEAM 
WHERE teamcity != gamecity GROUP BY gameid, gameid HAVING COUNT(gameid) 
> 1) ORDER BY gameid; 
+0

、他はそれを知って、このみましょうが解消されます。ありがとう。 *途中で内部結合を使用する方法を知りたいかもしれませんが、自然結合は非常に制限されています。* –

+0

@Used_By_すでに2日間回答を受け入れることはできません。そして、ありがとう、私は間違いなく内側の結合を調べます! – Strobe00

関連する問題