Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-从子查询中选择主键_Sql_Oracle - Fatal编程技术网

SQL-从子查询中选择主键

SQL-从子查询中选择主键,sql,oracle,Sql,Oracle,大约一周前刚启动SQL,我想知道为什么这会给我一个错误。 如果我在顶部选择*我可以看到项目编号,如果我使用任何其他列名,但我看不到这个 我使用的是Oracle和ORDER\u交付物,它的主键是ITEM\u编号,而DIGITALPRODUCT\u ORDER.ITEM\u编号的主键是PF,我假设它是Primary Foreign 如果有人能帮我解释一下,那就太好了。 谢谢 它返回什么错误 我怀疑这是一个模棱两可的字段错误,因为在select部分中使用*会从两个表中选择项_编号,因此引擎不知道选择哪

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

我使用的是Oracle和ORDER\u交付物,它的主键是ITEM\u编号,而DIGITALPRODUCT\u ORDER.ITEM\u编号的主键是PF,我假设它是Primary Foreign

如果有人能帮我解释一下,那就太好了。 谢谢


它返回什么错误

我怀疑这是一个模棱两可的字段错误,因为在select部分中使用*会从两个表中选择项_编号,因此引擎不知道选择哪一个。试试这个:

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

你必须从两个层面思考:

一,。让我们从ORDER_交付物中获取主键:

SHOW INDEX FROM ORDER_DELIVERABLES
二,。让我们将其构建到主查询中

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

这个逻辑是基于MySQL的,但我相信如果你查阅Oracle手册,你会发现如何从表中访问主键,而不需要疯狂的连接:。

是的,我只想更正一下。。。但你说得对,我要添加一些信息Sid他只是在选择商品编号,他可以用exists子句替换代价高昂的连接,只需执行SELECT o.ITEM\U NUMBER from ORDER\U deliveries o WHERE exists SELECT null from DIGITALPRODUCT\U ORDER d其中d.ITEM\U NUMBER=o.ITEM\U NUMBER。如果他真的只想要项目编号,那么从DIGITALPRODUCT\U ORDER中选择不同的项目编号就行了!从SELECT*FROM ORDER\u可交付成果o内部连接数字产品d上的订单d中选择t.ITEM\u编号d.ITEM\u编号=o.ITEM\u编号t我尝试过,但仍然出现错误。T.ITEM_NUMBER:无效标识符我更感兴趣的是为什么这个特定的查询不起作用,我知道有更简单的方法可以做到。是的,如果我不在子查询中选择*,我还能访问其他列吗?
SELECT ITEM_NUMBER
FROM SOME_MAIN_TABLE
WHERE ID = (
    SHOW INDEX FROM ORDER_DELIVERABLES
)