2017-04-26 6 views
0

BY ORDERと私は(問題に直面していますが)ここに私のSQLです:エラー()SELECT DISTINCTを使用している場合

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'の周りの括弧は余分です)。 't4.date'の値は、SELECT DISTINCTリストに含まれていないので、ORDER BY節では使用できません。 DISTINCTではなくGROUP BY句を使用します。 – 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がすべてのテーブルに関連している場合にのみ結果を返します。あなたが望むなら、それを変更することができます。 –

関連する問題