3

私の2つのテーブルは

Entry
event_id   competitor_id   place
101        101             1
101        102             2
101        201             3
101        301             4
102        201             2
103        201             3

2番目の表は、イベントに提供される賞品を示しています

Prize
event_id   place          money
101        1              120
101        2              60
101        3              30
102        1              10
102        2              5
102        3              2
103        1              100
103        2              60
103        3              40

これから私は彼らが尊敬されている配置のために獲得した金額と一緒にエントリーテーブルからのすべての情報を示すことを探しています。入金に失敗した場合は0が表示されます。

どんな助けでもいただければ幸いです。

4

3 に答える 3

6

これを試して:

SELECT  a.Event_ID, 
        a.Competitor_ID,
        a.Place,
        COALESCE(b.money, 0) as `Money`
FROM    entry a left join prize b
            on  (a.event_id = b.event_ID) AND
                (a.place = b.Place)

お役に立てれば。

EVENT_ID    COMPETITOR_ID   PLACE   MONEY
101           101            1      120
101           102            2       60
101           201            3       30
101           301            4        0   -- << this is what you're looking for
102           201            2        5
103           201            3       40
于 2012-05-03T00:24:26.970 に答える
2

これを試して:

select e.*, coalesce(p.money, 0) money from entry e
left join prize p
on e.event_id = p.event_id and e.place = p.place

ここでフィドルで遊ぶことができます。

于 2012-05-03T00:26:27.537 に答える
2
SELECT * FROM Entry NATURAL LEFT JOIN Prize;

0賞を獲得しなかったときに「お金」の代わりに絶対に欲しい場合NULL(しかし、0 の賞と賞なしをどのように区別できますか?):

SELECT Entry.*, COALESCE(money, 0) AS money FROM Entry NATURAL LEFT JOIN Prize;

sqlfiddleで両方を参照してください。

于 2012-05-03T00:18:23.950 に答える