4

我正在尝试编写一个我不想使用笛卡尔积的查询。我打算使用 First 函数,因为一些 Type_Codes 有多个描述,我不想乘以我的美元。

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

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

于 2009-09-02T16:15:40.703 回答
2

first() 不是 SQL 标准。我忘记了它适用于什么数据库产品,但它不在大多数 SQL 引擎中。正如 Recursive 指出的那样, min() 在这里为您的目的完成了同样的事情,不同之处在于,根据查询的索引和其他组件,在您的情况下,它可能需要搜索许多记录来找到最小值 - - 还有很多我自己的 - 你真正想要的只是任何匹配。我不知道任何标准的 SQL 方式来问这个问题。SQL 似乎是由寻求严格应用集合论的数学家设计的,而不是由寻求尽可能快速有效地解决现实世界问题的实用计算机极客设计的。

于 2009-09-02T17:25:44.603 回答
1

我忘记了这个特性的实际名称,但你可以让它真正加入一个子查询。在该子查询中,您可以像 oxbow_lakes 建议的那样使用“top 1”

就像是:

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