2015-04-06 49 views
1

因此,我查询一个名为标记的表,其中我加入到包含这些标记编辑的表中,并从表中选择最近的编辑(表名:content_edits)。但是,并非所有标记都有编辑(并且返回结果因此在查询中返回null),所以我想默认创建标记的日期。这个查询正确地抓住了这两个日期值,但我希望它们在一个列名中,这样我可以对列进行排序以返回最近的日期。在空值上切换sql列JOIN值

SELECT m.id, m.name, m.description, m.directions, m.type, m.date_create, ce.date_decide 
FROM markers AS m 
LEFT OUTER JOIN (
    SELECT entity_id, entity_type, max(date_decide) as date_decide 
    FROM content_edits 
    WHERE status=1 
    GROUP BY entity_id, entity_type) ce ON ce.entity_id=m.id 
LIMIT 500 

我想答案应该有“IF空的一番风味THEN m.date_create`,但我没有太多的想法在那里,这将去还是正确的语法。

真诚感谢您的任何帮助。非常感谢。

+0

什么是您的RDBMS? – potashin

回答

2

您可以使用CASEIS NULL检查:

CASE WHEN ce.date_decide IS NULL THEN m.date_create ELSE ce.date_decide END 

如果您正在使用SQL Server 2012及更高版本(你有sql-server标签),你可以你要跟iif功能:

IIF(ce.date_decide IS NULL, m.date_create, ce.date_decide) 

由于你的问题也被标记为mysql那么你可以使用if

IF(ce.date_decide IS NULL, m.date_create, ce.date_decide) 
+0

谢谢一堆。在mySQL上。这段代码在哪里添加?在声明的最后。 – ambe5960

+0

@ ambe5960:而不是'm.date_create,ce.date_decide'。而且,很高兴为您效劳。) – potashin

+1

工程很棒。谢谢您的帮助。不胜感激。 – ambe5960