0

「ジャック」という名前のプレーヤーの ID と、彼らがプレイしたゲームの数を見つけようとしています。

Select p.id, count(*) as numOfGamePlayed
from player p, game g
where p.name = 'Jack' and p.id = g.id
group by p.id;

問題は、これは、少なくとも 1 つのゲームをプレイしたことのある Jack という名前のプレイヤーのみをリストすることです。ゲームをまったくプレイしていない人もリストにするにはどうすればよいですか?

編集: それらのプレーヤーの場合、numOfGamePlayed は 0 でなければなりません。

Select p.id, count(*) as numOfGamePlayed
from player p LEFT JOIN game g ON p.id = g.id
where p.name = 'Jack'
group by p.id;

ゲームをまったくプレイしていない場合でも、numOfGamePlayed は 1 として表示されます。

4

4 に答える 4

4

スターターへの暗黙的な結合の使用を停止します。とにかくこれは悪い習慣です。次に、これを行うことができます:

Select p.id, count(g.id) as numOfGamePlayed
from player p
LEFT JOIN game g
 ON p.id = g.id
where p.name = 'Jack'
group by p.id;
于 2013-03-14T16:19:30.573 に答える
0

プレーヤーとゲームの間に外部結合が必要です

SELECT p.ID, 
  COUNT(*) AS numOfGamePlayed
FROM player p
LEFT OUTER JOIN game g
ON p.id = g.id
WHERE p.name = 'Jack'
GROUP BY p.ID;
于 2013-03-14T16:18:55.903 に答える
0
SELECT p.id, count(*) as numOfGamePlayed
FROM player p
LEFT JOIN game g ON g.id = p.id
WHERE p.name = 'Jack'
--AND g.id IS NULL
GROUP BY p.id;
于 2013-03-14T16:19:11.060 に答える
0

count(*) の代わりに count(game.PlayerId) を実行する必要があります

ここで SQL Fiddle のデモを参照してください

select p.PNAME, g.gameplayed
from player p 
left outer join game g
ON p.pid = g.pid;

Select p.pid, count(g.pid) as numOfGamePlayed
from player p 
LEFT JOIN game g 
ON p.pid = g.pid
where p.pname = 'Jack'
group by p.pid;
于 2013-03-14T16:53:17.753 に答える