2009-09-02 66 views
4

我想寫一個查詢,我不想有笛卡爾產品。我打算使用First函數,因爲有些Type_Codes有多個描述,我不想增加我的美元。SQL:替代「第一個」功能?

Select 
Sum(A.Dollar) as Dollars, 
A.Type_Code, 
First(B.Type_Description) as FstTypeDescr 
From 
Totals A, 
TypDesc B 
Where 
A.Type_Code = B.Type_Code 
Group by A.Type_Code 

我只是想抓住給定代碼的任何描述(我並不在乎哪一個)。嘗試使用FIRST時出現以下錯誤:

[IBM][CLI Driver][DB2/AIX64] SQL0440N No authorized routine named "FIRST" of type "FUNCTION" 

是否有另一種方法可以做到這一點?

回答

6

而不是First(),請使用MIN()

+0

不知道我可以在文本字段上使用MIN,謝謝! – Dan 2009-09-02 16:21:35

1

我忘記了這個功能的實際名稱,但是你可以讓它真正加入到子查詢中。在子查詢,你可以像oxbow_lakes建議,並使用 「頂部1」

類似:

select * from table1 
inner join (select top 1 from table2) t2 on t2.id = table1.id 
2

第()不是SQL標準。我忘記了它的數據庫產品,但它不在大多數SQL引擎中。正如遞歸指出的那樣,min()在這裏完成了同樣的事情,區別在於,根據查詢的索引和其他組件,它可能需要搜索許多記錄才能找到最小值, - 和我自己的很多 - 你真正想要的是任何比賽。我不知道任何標準的SQL方式來問這個問題。 SQL似乎是由尋求集合論的嚴格應用的數學家設計的,而不是尋求儘可能快速和高效地解決現實世界問題的實際計算機愛好者。