2

大约一周前刚开始使用 SQL,我想知道为什么这会给我一个错误。如果我在顶部选择 *,我可以看到 ITEM_NUMBER 以及如果我使用任何其他列名但我看不到这个。

我正在使用 Oracle 并且 ORDER_DELIVERABLES 有 ITEM_NUMBER 作为主键,而 DIGITALPRODUCT_ORDER.ITEM_NUMBER 有它作为它的 PF,我假设它是主外键?

如果有人可以帮助我并解释一下,那就太好了。谢谢!

SELECT ITEM_NUMBER
FROM
(
  SELECT *
  FROM ORDER_DELIVERABLES
  INNER JOIN DIGITALPRODUCT_ORDER 
          ON DIGITALPRODUCT_ORDER.ITEM_NUMBER = ORDER_DELIVERABLES.ITEM_NUMBER
)
4

2 回答 2

3

what error does it return?

I suspect this is an ambiguous field error, because using * in the select part selects the item_number from the 2 tables, so the engine doesn't know which one to take. Try this:

SELECT t.it
FROM
(
  SELECT o.ITEM_NUMBER it
  FROM ORDER_DELIVERABLES o
      INNER JOIN DIGITALPRODUCT_ORDER d ON d.ITEM_NUMBER = o.ITEM_NUMBER
) t

As commented, your query could actually be done this way:

SELECT o.ITEM_NUMBER
FROM ORDER_DELIVERABLES o
      INNER JOIN DIGITALPRODUCT_ORDER d ON d.ITEM_NUMBER = o.ITEM_NUMBER
于 2012-06-19T23:00:41.887 回答
0

你必须从两个层面思考:

1.) 让我们从 ORDER_DELIVERABLES 中获取主键:

SHOW INDEX FROM ORDER_DELIVERABLES

2.) 让我们将它构建到主查询中

SELECT ITEM_NUMBER
FROM SOME_MAIN_TABLE
WHERE ID = (
    SHOW INDEX FROM ORDER_DELIVERABLES
)

这个逻辑是基于 MySQL 的,但我敢肯定,如果您查找 Oracle 手册,您可以找到如何在没有疯狂连接的情况下从表中访问主键 :)。

于 2012-06-19T23:07:21.667 回答