MAX()不从LEFT JOIN返回NULL行

时间:2016-05-10 08:33:13

标签: mysql null left-join

这将返回多行:

SELECT w.word_id, w.word_word, w.word_visits, w.word_created_unix, b.bid_per_visit
FROM keywords_words AS w
LEFT JOIN keywords_bids AS b
ON w.word_id = b.bid_word_id WHERE w.word_word LIKE 'an%'
ORDER BY w.word_visits DESC
LIMIT 10

但这只会返回在keywords_bids中出价的行:

SELECT w.word_id, w.word_word, w.word_visits, w.word_created_unix, MAX(b.bid_per_visit)
FROM keywords_words AS w
LEFT JOIN keywords_bids AS b
ON w.word_id = b.bid_word_id WHERE w.word_word LIKE 'an%'
ORDER BY w.word_visits DESC
LIMIT 10

如果有出价,如何让它返回MAX(b.bid_per_visit),如果没有出价则如何返回0。

基本上不排除原始LIKE搜索中的行。

2 个答案:

答案 0 :(得分:2)

使用合并:

...
MAX(coalesce(b.bid_per_visit, 0))
...

或者不要简单地分组:

...
coalesce(b.bid_per_visit, 0)
...

coalesce()返回其值列表中的第一个非空值。对于左连接,为joiner表返回空值,因为没有匹配的行。

答案 1 :(得分:0)

使用IFNULL(MAX(b.bid_per_visit),0)解决你的问题,如果MAX(b.bid_per_visit)为空,它将返回0,如果非空,则返回b.bid_per_visit的最大值。