2017-04-26 86 views
0

我使用SELECT DISTINCT()與ORDER BY ... 時面臨的一個問題這是我的SQL:使用SELECT DISTINCT()與ORDER BY錯誤

SELECT DISTINCT(t2) 
FROM Table1 t1 
JOIN Table2 t2 ON t1.t2 = t2.id 
JOIN Table3 t3 ON t1.t3 = t3.id 
JOIN Table4 t4 ON t2.t4 = t4.id 
JOIN Table5 t5 ON t2.t5 = t5.id 
JOIN Table6 t6 ON t2.t6 = t6.id 
ORDER BY t4.date DESC 

但它是錯誤的...你有什麼想法?

在此先感謝! =)

+2

出現了什麼問題?你在期待什麼? t2在哪個表中?使用匹配列名的表別名是一個壞主意。 –

+0

'DISTINCT'是一個關鍵字,而不是一個函數。它適用於整個SELECT列表。 ('t2'周圍的遺骸是多餘的)。 ORDER BY子句中沒有't4.date'的值,因爲它不包含在SELECT DISTINCT列表中。使用GROUP BY子句而不是DISTINCT。 – spencer7593

回答

2

SELECT DISTINCT查詢中,您只能按SELECT中的列進行排序。畢竟,date應該用於排序的值是什麼?

好吧,我猜可能。 。 。最大值。因此,使用聚合:

SELECT t2 
FROM Table1 t1 JOIN 
    Table2 t2 ON t1.t2 = t2.id JOIN 
    Table3 t3 ON t1.t3 = t3.id JOIN 
    Table4 t4 ON t2.t4 = t4.id JOIN 
    Table5 t5 ON t2.t5 = t5.id JOIn 
    Table6 t6 ON t2.t6 = t6.id 
GROUP BY t2 
ORDER BY MAX(t4.date) DESC; 
+1

我們寧願對列't2'的引用使用SELECT列表和GROUP BY的表別名('t1.t2')限定。 +10。 – spencer7593

0

你T2只是和你的表的別名,它不能做這樣的:

它應該是這樣的:

SELECT DISTINCT t2.*,t3.*,t4.* 
FROM Table1 t1 
JOIN Table2 t2 ON t1.id = t2.id 
JOIN Table3 t3 ON t1.id = t3.id 
JOIN Table4 t4 ON t2.id = t4.id 
JOIN Table5 t5 ON t2.id = t5.id 
JOIN Table6 t6 ON t2.id = t6.id 
ORDER BY t4.date DESC 

你有如果您正在使用*,因爲它會返回一個模棱兩可的錯誤,請小心使用相同的列名稱。您可以簡單地使用t3.column1等。

+0

如果您的表ID與其每個表相關,則此查詢只返回結果。如果你願意,你可以改變它。 –