2012-05-03 10 views
3

私の2つのテーブルMySQLの取得データは

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

第二のテーブルは、私はすべての情報を表示するために探しています。このことからイベント

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 

のための提供する上で賞品を一覧表示されている構文に参加しますEntryテーブルから、彼らが尊敬すべき場所に入賞した金額の横に並べて表示します。彼らがお金に入れなかった場合、0が表示されます。

ご協力いただければ幸いです。

+0

「*お金に入れなかった場合*」の条件は何ですか? – Lion

+0

たとえば、この場合、イベント101には4位の賞の記録はありません。 – coops737

+0

4位はOPが望むものとして0が表示されます。 –

答えて

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

これは、お金を受け取らなかった競争相手に0の価値を与えるために求められているものによく似ています。 –

+0

私は彼の質問をはっきりと理解すれば、これはOPに答えを与えるでしょう。 –

+0

本当にあなたはいい仕事をしました。 –

2
SELECT * FROM Entry NATURAL LEFT JOIN Prize; 

あなたは全く賞を受賞しなかった「お金」のための0代わりのNULLたい場合(ただし、0の賞金なし賞金を区別することができますか?):

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

参照してください。両方ともon sqlfiddleです。

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 

あなたはバイオリンhereで遊ぶことができます。

関連する問題