最大化列的 DB2 连接查询
DB2 Join Query that Maximizes Column
我的基本知识还行 SQL,但当涉及到更复杂的搜索时,我的理解就失败了。
现在,我正在尝试 return 位置 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 调用的内部开发应用程序进行调用。
当我尝试 运行 下面的代码时,出现以下错误:
ERROR [42601][IBM][DB2/AIX64] SQL0104N An unexpected token "10" was found following "DOR IN ( SELECT TOP". Expected tokens may include: "CONCAT".
我不确定这是我们内部开发的应用程序的限制还是 DB2 中的某些限制。
我在此处查看了 SQL 教程:
http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
在那里,我使用他们提供的 table 创建了一个类似的查询:
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
它给了我一个类似的错误:
Error 1: could not prepare statement (1 near "10": syntax error)
我需要做什么才能将我的 SQL 查询修改为 return 库存最多的供应商?
我可以按 IN_STOCK 数量订购 LOCATIONS table,但我无法过滤到获取 INVENTORY 条有效记录(数据库中有大量测试数据)。
Select TOP
子句在 DB2 上无效。 Intead 使用
SELECT *
FROM myTable
ORDER BY id
FETCH FIRST 10 ROWS ONLY
我的基本知识还行 SQL,但当涉及到更复杂的搜索时,我的理解就失败了。
现在,我正在尝试 return 位置 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 调用的内部开发应用程序进行调用。
当我尝试 运行 下面的代码时,出现以下错误:
ERROR [42601][IBM][DB2/AIX64] SQL0104N An unexpected token "10" was found following "DOR IN ( SELECT TOP". Expected tokens may include: "CONCAT".
我不确定这是我们内部开发的应用程序的限制还是 DB2 中的某些限制。
我在此处查看了 SQL 教程:
http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
在那里,我使用他们提供的 table 创建了一个类似的查询:
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
它给了我一个类似的错误:
Error 1: could not prepare statement (1 near "10": syntax error)
我需要做什么才能将我的 SQL 查询修改为 return 库存最多的供应商?
我可以按 IN_STOCK 数量订购 LOCATIONS table,但我无法过滤到获取 INVENTORY 条有效记录(数据库中有大量测试数据)。
Select TOP
子句在 DB2 上无效。 Intead 使用
SELECT *
FROM myTable
ORDER BY id
FETCH FIRST 10 ROWS ONLY