SQL - 从子查询中选择主键

时间:2012-06-19 22:57:16

标签: sql oracle

大约一周前刚刚启动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
)

2 个答案:

答案 0 :(得分:3)

它返回什么错误?

我怀疑这是一个模糊的字段错误,因为在*部分中使用select会从2个表中选择item_number,因此引擎不知道要采用哪个。试试这个:

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

如评论所述,您的查询实际上可以通过以下方式完成:

SELECT o.ITEM_NUMBER
FROM ORDER_DELIVERABLES o
      INNER JOIN DIGITALPRODUCT_ORDER d ON d.ITEM_NUMBER = o.ITEM_NUMBER

答案 1 :(得分: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手册,您可以找到如何从没有疯狂连接的表中访问主键:)。