2015-04-06 38 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