oracle子查询嵌套问题

时间:2017-12-18 15:09:00

标签: sql oracle

我正在尝试在Oracel-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
   ;

3 个答案:

答案 0 :(得分: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;

OR

 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;

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

答案 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
  ;

此外,目前还不清楚你想做什么。你想使用嵌套表吗?或者查询子查询?或其他什么?

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

答案 2 :(得分:0)

子查询类似于表。

表是一组行。视图是一组行。 select语句的结果是一组行。他们都拥有相同的权利和责任&#34;。任何行集都可以用作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

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