oracle子查询嵌套问题

问题描述 投票:0回答:3

我正在尝试在Oracle-sql中练习子查询,我很难理解它的概念。

在我的下面的代码中,我试图将一个名为item_loc的表嵌套到另一个名为store_item的表中,下面的代码不能编译。我得到一个错误

ORA-00933: SQL command not properly ended 00933. 00000 -  "SQL command not properly ended"

我不知道该怎么做才能解决它?

 SELECT sub.store
 FROM store_item sub
   (SELECT item_id
    FROM item_loc
    WHERE item_id = 1134373
    )sub
  WHERE sub.store = 1
  ;

但是,当我运行上面的代码但修改它时,它会运行。但我觉得好像我运行下面的代码我不需要嵌套任何东西。我只是想了解嵌套是如何工作的。

  SELECT sub.*
  FROM 
   (SELECT item_id
    FROM item_loc
    WHERE item_id = 1134373
   )sub
   ;
sql oracle
3个回答
1
投票

问题是:你使用别名sub两次。也许是这样的:

SELECT sub.store
 FROM store_item sub2
 WHERE item_id in
   (SELECT item_id
    FROM item_loc
    WHERE item_id = 1134373
    )
  AND sub2.store = 1;

要么

 SELECT sub.store
 FROM store_item sub2 join
   (SELECT item_id
    FROM item_loc
    WHERE item_id = 1134373
    ) sub ON sub.item_id = sub2.item_id -- i assume join condition
  WHERE sub2.store = 1;

即你应该以两种不同的方式比较两组。


0
投票

您的陈述至少包含两个错误。首先,它的FROM子句包含两个具有相同名称“sub”的不同引用。接下来,它们之间应该是逗号或连接子句。为了正确,它应该是这样的

 SELECT sub1.store
 FROM store_item sub1 join
   (SELECT item_id
    FROM item_loc
    WHERE item_id = 1134373
    ) sub2 on <<<some condition>>>
  WHERE sub1.store = 1
  ;

而且,目前还不清楚你想做什么。你想使用嵌套表吗?或者查询子查询?或者是其他东西?

无论如何,很难在非常人为的例子上学到一些东西。尝试找到可以使用这种技术的真正问题,它更容易。


0
投票

子查询类似于表。

表是一组行。视图是一组行。 select语句的结果是一组行。他们都有相同的“权利和责任”。任何行集都可以用作select语句中的数据源。

你可以写:

select <columns list> from mytable

mytable这是一张桌子。接下来,您可以将此语句视为表并编写以下内容:

select <something else>
  -- you replace here a name of a table with the query (which is a subquery)
  from (select <columns list> from mytable)

您可以为表/视图/子查询提供别名:

select <columns list> from mytable t;

select <something else>
  from (select <columns list> from mytable) subquery

这里tsubquery是别名。

接下来,加入。你可以加入任何这个(表/视图/子查询)与任何:

select ...
  from mytable t,
       (...) subquery
 where t.column1 = subquery.column2

要么

select ...
  from mytable t join (...) subquery
       on t.column1 = subquery.column2

现在,我认为很明显,您的查询有什么问题。

© www.soinside.com 2019 - 2024. All rights reserved.