我的两张桌子是
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
由此我希望显示条目表中的所有信息以及他们因尊重的位置而获得的金额。如果他们没有放入钱,那么将显示0。
任何帮助都将不胜感激。
答案 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 :(得分: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 :(得分: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。