0

次のテーブルがあります (無関係な列は除外されています)。

games:
id
 1
 2
 3
 4

bets:
id | user_id | game_id
 1 |    2    |   2
 2 |    1    |   3
 3 |    1    |   4
 4 |    2    |   4

users:
id
 1
 2

「ユーザー」が「賭ける」ことができる「ゲーム」があります。すべてのユーザーは、1 つのゲームに最大 1 回賭けることができますが、ユーザーが賭けていないゲームもあります (たとえば、ユーザー 1 はゲーム 1 または 2 に賭けていません)。

ここで、1 人のユーザー (ID 1 のユーザーとしましょう) のすべてのゲームと、このゲームに対する彼の賭け (たまたまそのゲームに賭けた場合) を表示したいと考えています。

上記の例では、次のことを意味します。

desired results:
game.id | bet.id
   1    |    null
   2    |    null
   3    |    2
   4    |    3    

要約する:

ゲームがあります

  • まったく賭けていない (ゲーム 1)
  • 今は気にしないユーザーによる賭けがあります (ゲーム 2)
  • 気になるユーザーによる賭けがあり、かつ

    • 他のユーザーからの賭けがない (ゲーム 3)
    • 他のユーザーからの賭けもあります (ゲーム 4)

私は良い解決策を考え出すために午後全体を費やしましたが、私はそうしませんでした。

サブクエリは、私が使用しようとしている環境では実際にはサポートされていないため、可能であれば使用しないでください。

ありがとう!

4

3 に答える 3

1

これを試しましたか?

SELECT  a.id GameID,
        b.id BetID
FROM    Games a
        LEFT JOIN bets b
            ON  a.id = b.game_id AND
                b.user_id = 1  -- <<== ID of the User
ORDER   BY a.ID ASC
于 2013-08-04T19:25:39.310 に答える
1

次の条件で単純な左結合を使用できます (id = 1 のユーザーを想定)。

SELECT games.id, bets.id 
FROM games 
LEFT JOIN ON (bets.game_id = games.id AND bets.user_id = 1);
于 2013-08-04T19:25:40.263 に答える
1

LEFT JOINを使用する必要がありますが、ユーザーの条件をWHEREではなくJOINに入れる必要があります。そうしないと機能しません。

このように:

SELECT g.id AS game_id, b.id AS bet_id 
FROM games g LEFT OUTER JOIN bets b ON g.id=b.game_id AND b.user_id = 1
于 2013-08-04T19:31:37.943 に答える