0

私にはテーブルメンバーがいます:

member_id, points

そして、私は別のテーブルベットを持っています:

member_id, finished

テーブルメンバーの次のデータを検討してください。

1 0
2 15000
3 0

そして賭けのために:

1 -1
1  0
2  1
3  1
3 -1

表では、終了した賭け= -1は賭けを失ったものとしてマークし、0は未完了としてマークし、1は勝ったものとしてマークします。0ポイントですべてのベットが終了したメンバーIDを選択するにはどうすればよいですか?私が提供したデータでは、メンバーID=3の1行が返されるはずです。

4

5 に答える 5

3

EXISTS 句を使用できます。

select members.id
from members
where
  points=0
  and not exists (select null from bets where bets.id=members.id and status=0)

LEFT JOIN を使用することもできます。

select members.id
from
  members left join bets
  on members.id = bets.id
     and bets.status=0
where
  bets.id is null
  and members.points=0
于 2013-01-16T22:24:40.043 に答える
0

JOIN次のように、を使用します。

select members.member_id, members.points, bets.finished
  from members
  join bets on bets.member_id = members.member_id
  where bets.finished <> 0 and members.points = 0;
于 2013-01-16T22:19:37.220 に答える
0

内部結合を使用できます

SELECT member_id FROM members m
INNER JOIN bets b
ON m.member_id = b.member_id
WHERE b.finished = 0 AND m.points = 0

内部結合は、アプリケーションで使用される最も一般的な結合操作であり、デフォルトの結合タイプと見なすことができます。内部結合は、結合述語に基づいて2つのテーブル(AとB)の列値を組み合わせることにより、新しい結果テーブルを作成します。クエリは、Aの各行をBの各行と比較して、結合述語を満たす行のすべてのペアを見つけます。結合述語が満たされると、AとBの行の一致した各ペアの列値が結合されて結果行になります。

http://en.wikipedia.org/wiki/Join_(SQL)#Inner_join

あなたの場合、join-predicatem.member_id = b.member_idです。

于 2013-01-16T22:19:53.960 に答える
0

-ほとんどの答えはあなたの重要な問題に対処していません-すべての賭けはそれらの1つだけでなく行われます-ここに行きます

Select memberid 
  from members 
 where points = 0 
   and member id not in (select member id from bets where bet <> -1 )

または、データが非常に大量に増加するにつれて、さらに効率を高めるために

Select memberid 
  from members 
 where points = 0 
   and member id not in (select member id from bets where bet <> -1 and bets.memberid = members.memberid)
于 2013-01-16T22:20:19.670 に答える
0

これを試して

   SELECT m.member_id , b.finished FROM members m
   INNER JOIN bets b
   ON m.member_id = b.member_id
   WHERE m.points = 0
   and b.finished = 1

デモを見る

于 2013-01-16T22:20:40.340 に答える