DB2 Join Query最大化列

时间:2015-06-08 15:35:30

标签: sql db2

我对基本的SQL很满意,但是当涉及到更复杂的搜索时,我的理解就失败了。

现在,我正在尝试返回位置16的记录。

大多数记录都是空的,因此我无法使用这些记录调试我的数据库应用程序。

SELECT
  I.PART_NUM, I.ID, L.SHELF, L.IN_STOCK
FROM
  INVENTORY I
  JOIN LOCATIONS L ON I.ID=L.INV_ID
WHERE
  L.ID=16 AND PART_NUM IN 
  (
    SELECT
      TOP 10 N.PART_NUM
    FROM
      INVENTORY N 
      JOIN LOCATIONS T ON N.ID=T.INV_ID
    WHERE
      T.ID=16
    ORDER BY 
      IN_STOCK
  )
ORDER BY 
      IN_STOCK, I.PART_NUM

开发人员不能直接访问数据库,而是使用允许基本SQL调用的内部开发应用程序进行调用。

当我尝试运行下面的代码时,出现以下错误:

  

错误[42601] [IBM] [DB2 / AIX64] SQL0104N在“DOR IN(SELECT TOP”)之后发现意外的令牌“10”。预期的令牌可能包括:“CONCAT”。

我不确定这是否是我们内部开发的应用程序的限制或DB2中的某些内容。

我在这里找到了SQL教程:

http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

在那里,我使用他们提供的表来创建类似的查询:

SELECT 
    OrderID, ProductID, Quantity, LastName, FirstName
FROM 
    OrderDetails I 
    JOIN Orders L ON I.OrderID=L.OrderID
WHERE 
    EmployeeID=5 AND OrderDetailID IN 
    (
        SELECT 
            TOP 10 N.OrderDetailID 
        FROM 
            OrderDetails N 
            JOIN Orders T ON N.OrderID=T.OrderID
        WHERE 
            EmployeeID=5
        ORDER BY 
            Quantity
    )
ORDER BY 
    Quantity

它给了我一个类似的错误:

  

错误1:无法准备语句(1接近“10”:语法错误)

我需要做些什么来修改我的SQL查询以返回库存数量最多的供应商?

我可以按 IN_STOCK 数量订购 LOCATIONS 表格,但我无法过滤以获取有效的 INVENTORY 记录(很多测试数据库中的数据。)

1 个答案:

答案 0 :(得分:4)

子句Select TOP在DB2上无效。 Intead使用

SELECT * 
FROM myTable
ORDER BY id
FETCH FIRST 10 ROWS ONLY