2013-01-16 65 views
0

我有一個表成員如何從MySQL中的另一個表過濾一個表中選擇行?

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

回答

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 
+0

+1用於顯示這兩種解決方案 – bonCodigo

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; 
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 

內連接是應用程序中最常用的連接操作,可視爲默認連接類型。內部連接通過基於連接謂詞組合兩個表(A和B)的列值來創建新的結果表。查詢將A的每一行與B的每一行進行比較,以查找滿足連接謂詞的所有行對。當滿足連接謂詞時,將A和B的每對匹配行的列值合併到一個結果行中。

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

在你的情況下,加入謂m.member_id = b.member_id

0

- 大部分的答案沒有解決您的關鍵問題 - 所有的賭注都放在不只是他們中的一個 - 在這裏你去

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) 
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 

LOOK DEMO SQLFIDDLE

+0

編輯我的職位,採取了儘量 –

相關問題