2012-01-21 42 views
3

我想合併來自兩個文件的數據,但是我在表達類型時遇到了困難。我想對來自第一個文件的CREATED日期和來自第二個文件的SHARED_DATE進行排序,如果它存在並且它更大。mysql - JOIN或UNION - 不確定哪一個,也許都是

file 1 : NODE# 
    fields: CREATED, CHANGED 

    file 2 : SHARE_CONTENT 
    fields: SHARED_DATE , NODE# (foreign key) 


select * from NODE as n left join SHARE_CONTENT as s on (s.NODE#=n.NODE#) 
ORDER BY [higher of n.CREATED and s.SHARED_DATE] 

回答

0

我SQL技能是有些生疏,但它似乎要兩個表在一個查詢合併,顯示所有的信息一起,同時匹配返回的行?我認爲這是一個完整的外部聯接。

這裏是SQL joins

1

極大的視覺參考由LastDate

SELECT n.*,s.*, 
(CASE WHEN n.CREATED > s.SHARED_DATE then n.CREATED else s.SHARED_DATE end) as LastDate 
FROM node as n LEFT JOIN share_conten as s on (s.NODE#=n.NODE#) 
ORDER BY LastDate DESC 
+0

這是否正確處理's'不存在的情況?在我看來,它不會,因爲'n.created> s.shared_date'不會評估爲true。 –

+0

你是對的......但是有一個[part II](http://stackoverflow.com/q/8950110/1158170)可以解決這個問題 – rauschen

+0

是的,我沒有看到第2部分,因爲我發現了這個問題在第2部分中缺少的「sql」標記下。我想知道爲什麼OP沒有編輯原始問題。我想我會去第二部分發表自己的答案;如果Mustapha George需要多個孩子的名字:-) –

0

排序,你可以使用ORDER BY MAX(n.CREATED,s.SHARED_DATE);由FULL OUTER JOIN引入的NULLS將被MAX忽略(也就是說,任何事情的MAX和NULL都是這個事情)。

+0

看起來很有前途,但mySQL 4.1似乎不喜歡ORDER BY(CAL1,VAL2) –