我正在尝试在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
;
答案 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
此处t
和subquery
是别名。
接下来,加入。您可以使用任何:
加入任何此类(表/视图/子查询)select ...
from mytable t,
(...) subquery
where t.column1 = subquery.column2
或
select ...
from mytable t join (...) subquery
on t.column1 = subquery.column2
现在,我认为很明显,您的查询有什么问题。