2013-11-15 58 views
1

我有幾個左外部連接的查詢,爲簡單起見,我將只包括這兩個。它看起來是這樣的:多個外部連接返回最高結果

SELECT Object.ID, Gloss.name, Gloss.order, Title.name from Object 
LEFT OUTER JOIN Gloss on Gloss.object_id = Object.ID 
LEFT OUTER JOIN Title on Title.object_id = Object.ID 

然而,一些項目有多個光澤,我想不管是用最大或最小Gloss.order返回只有一行。從我的查詢的示例輸出如下:

|Object.ID | Gloss.name | Gloss.order | Title.name 
|4.00  | glossvalue1| 1   | TitleValue 
|4.00  | glossvalue2| 2   | TitleValue 
|3.00  | gloss3-1 | 11   | OtherTitle 
|3.00  | gloss3-2 | 13   | OtherTitle 
|3.00  | gloss3-3 | 15   | OtherTitle 

理想情況下,我想回這樣的事:

|Object.ID | Gloss.name | Gloss.order | Title.name 
|4.00  | glossvalue1| 1   | TitleValue 
|3.00  | gloss3-1 | 11   | OtherTitle 

我想我需要一些最大或最小的事情,但我有麻煩將其與其他外連接(不需要最大或最小)相結合。 任何幫助表示讚賞,讓我知道如果你需要更多的信息。

回答

1

這應該做的工作:

SELECT Object.ID, (SELECT name FROM Gloss G WHERE G.object_id = X.object_id AND G.order = X.ord) AS [GlossName], 
    X.order, Title.name 
FROM Object 
LEFT OUTER JOIN 
    (SELECT object_id, MIN(order) ord FROM Gloss GROUP BY object_id) X 
ON X.object_id = Object.ID 
LEFT OUTER JOIN Title on Title.object_id = Object.ID 

我不想拿分鐘光澤的名字,因爲我明白你的分,應根據光澤的順序。

+1

首先,我得到了「沒有列名稱被指定爲'X'錯誤的列2,然後將MIN(order)更改爲MIN(order)ord和X.or​​der從SELECT轉換爲x.ord 「我當時在做生意,謝謝, – user2856332

+0

是的,沒錯!我根據這個更新了我的答案。 – Szymon

0
SELECT Object.ID, min(Gloss.name), min(Gloss.order), Title.name from Object 
LEFT OUTER JOIN Gloss on Gloss.object_id = Object.ID 
LEFT OUTER JOIN Title on Title.object_id = Object.ID 
GROUP BY Object.ID,Title.name 
0
select object.ID, Gloss.name, min(Gloss.order) as order, Title.name 
from object 
left outer join Gloss on Gloss.object_id = object.ID 
left outer join Title on Title.object_id = object.ID 
group by object.ID, Gloss.name, Title.name