mysql左连接顺序由空值到结尾

时间:2010-12-01 16:09:42

标签: mysql

MySQL的

SELECT * FROM media
LEFT JOIN media_priority
ON (media_priority.media_id = media.id AND media_priority.media_tag = '".$tag."')
WHERE something = 'something'
ORDER BY media_priority.media_order;

这很好用,除了media_priority.media_order有时会返回null并且mysql将空值放在顶部。

所以我试图弄清楚如何用我的左连接做一个IS NULL AS tempcol语句,所以我可以先按顺序排序......我似乎无法正确使用语法。

我在上面的查询中将IS NULL语句放在哪里?

我在想这样的事情:

LEFT JOIN media_priority
ON (media_priority.media_id = media.id AND media_priority.media_tag = '".$tag."')
media_priority.media_order IS NULL AS isnull

但这不起作用。

2 个答案:

答案 0 :(得分:11)

ORDER BY 
    CASE WHEN media_priority.media_order IS NULL THEN 1 ELSE 0 END, 
    media_priority.media_order;

如果您有一个media_order永远无法达到的上限,请使用幻数。

ORDER BY 
    COALESCE( media_priority.media_order,99999999);

第一种方法显然更安全一些!

答案 1 :(得分:11)

我建议首先按照media_priority.media_order IS NULL的布尔值排序,然后按列值排序,以强制NULL结束。

像这样:

SELECT * FROM media
LEFT JOIN media_priority
ON (media_priority.media_id = media.id AND media_priority.media_tag = '".$tag."')
WHERE something = 'something'
ORDER BY (media_priority.media_order IS NULL) ASC, media_priority.media_order ASC;