4

デカルト積を入れたくないクエリを書き込もうとしています。一部のType_Codeには複数の説明があり、ドルを掛けたくないので、First関数を使用しました。

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"

これを行う別の方法はありますか?

4

3 に答える 3

6

Instead of First(), use MIN().

于 2009-09-02T16:15:40.703 に答える
2

first() は SQL 標準ではありません。どのデータベース製品で動作するかは忘れましたが、ほとんどの SQL エンジンにはありません。Recursive が指摘しているように、min() はここで目的のために同じことを達成します。違いは、クエリのインデックスやその他のコンポーネントによっては、最小値を見つけるために多くのレコードを検索する必要がある場合があることです。 - そして私自身の多く - あなたが本当に欲しいのは、任意の一致です. その質問をする標準的な SQL の方法がわかりません。SQL は、現実世界の問題を可能な限り迅速かつ効率的に解決しようとする実用的なコンピューター オタクではなく、集合論の厳密な適用を求める数学者によって設計されたようです。

于 2009-09-02T17:25:44.603 に答える
1

この機能の実際の名前は忘れましたが、実際にサブクエリに参加できるようにすることができます。そのサブクエリでは、oxbow_lakes が提案するように実行して、「トップ 1」を使用できます

何かのようなもの:

select * from table1
 inner join (select top 1 from table2) t2 on t2.id = table1.id
于 2009-09-02T16:18:05.130 に答える