情報が必要なテーブルが 2 つあります。最初のテーブルの名前は Playing で、もう 1 つは Game です。
Player Game_ID Points
Game_ID Length Judged_by
同じ game_ID を持つプレイヤーのみを表示する SQL クエリを作成したいと考えています。また、そのゲームの長さ。私はSQLにかなり慣れていないので、これを行う方法がわかりません。
情報が必要なテーブルが 2 つあります。最初のテーブルの名前は Playing で、もう 1 つは Game です。
Player Game_ID Points
Game_ID Length Judged_by
同じ game_ID を持つプレイヤーのみを表示する SQL クエリを作成したいと考えています。また、そのゲームの長さ。私はSQLにかなり慣れていないので、これを行う方法がわかりません。
何を達成したいのかよくわかりません。1 つ以上のゲームをプレイしたすべてのユーザーが必要な場合は、次のようにします。
select p.player, g.game_id, g.length
from game g
inner join playing p on g.game_id = p.game_id
group by game_id
having count(game_id) > 1
特定のゲームをプレイしたすべてのプレイヤーが必要な場合は、次を使用します (game_id は例です)。
select p.player, g.game_id, g.length
from game g
inner join playing p on g.game_id = p.game_id
where game_id = 123
どうぞ:
select p.player, g.game_id, g.length
from game g
inner join playing p on g.game_id = p.game_id
where g.game_id in ( select g.game_id
from game g
inner join playing p on g.game_id = p.game_id
group by g.game_id
having count(p.game_id) > 1
)
order by g.game_id
このSQLFiddle の例を参照して、機能していることを確認してください。
テーブルplaying
との関係がわかりません。players
私は列を使用id
しplayer
、この例ではプレイヤー名も取得しました:
select g.game_id, g.length, p.first_name, p.last_name
from game g
inner join playing pg on g.game_id = pg.game_id
inner join Players p on p.id = pg.player
where g.game_id in ( select g.game_id
from game g
inner join playing pg on g.game_id = pg.game_id
group by g.game_id
having count(pg.game_id) > 1
)
order by g.game_id
select g.game_id, g.length, p.first_name, p.last_name, j.Judge_firstname, j.Judge_lastname
from game g
inner join playing pg on g.game_id = pg.game_id
inner join Players p on p.id = pg.player
inner join judges j on j.judge_id = g.judged_by
where g.game_id in ( select g.game_id
from game g
inner join playing pg on g.game_id = pg.game_id
where play_date > to_date('2012-05-01', 'YYYY-MM-DD')
group by g.game_id
having count(pg.game_id) > 1
)
order by g.game_id
この例を参照してください