FROM子句中的嵌套SELECT语句

时间:2018-01-25 15:23:27

标签: sql oracle

我想从表中获取名称保存在另一个表中的数据。如下所述尝试获取此结果将导致从嵌套的SELECT

获得结果

select * from (select value from ex_scheme.ex_tab where name = 'ex_name.current_table_name')

我的意思是,我从

获得了相同的结果

select value from ex_scheme.ex_tab where name = 'ex_name.current_table_name'

查询。

已更新 好的,让我们仔细检查一下我是否被正确理解。 我必须看一个表数据(让我们调用这个表" table1")。我需要知道这个表名。我知道它的名字在哪里。它位于另一个表格中(称之为" names_table")在列"名称" (列值=' table1'的行)。我可以通过查询得到它 select name from names_table where value = 'table1'

3 个答案:

答案 0 :(得分:0)

尝试给别名

select n.* from (select value from ex_scheme.ex_tab where name = 'ex_name.current_table_name') n;

更新

  

它位于“name”列中的另一个表(称为“names_table”)(行   列值='table1')。

此查询将起作用

select n.* from (select name from ex_scheme.ex_tab where name = 'ex_name.current_table_name') n;

子查询从另一个表中获取表的名称。

答案 1 :(得分:0)

如果您事先知道列及其类型,则可以构建一些动态SQL来动态查询表或其他。

例如,假设您有以下表格:

create table table1(col) as (select 1 from dual);
create table table2(col) as (select 2 from dual);
create table tab_of_tabs (tab_name) as (select 'TABLE1' from dual);

您可以使用动态SQL构建一个查询,该查询扫描名称是查询结果的表:

SQL> declare
  2      vSQL    varchar2(1000);
  3      vResult number;
  4  begin
  5      select 'select sum(col) from ' || tab_name -- build the query
  6      into vSQL
  7      from tab_of_tabs;
  8      --
  9      execute immediate vSQL into vResult;       -- run the query
 10      --
 11      dbms_output.put_line('Result: ' || vResult);
 12  end;
 13  /
Result: 1

PL/SQL procedure successfully completed.

SQL>

答案 2 :(得分:0)

如果我理解正确,您可以在where子句中使用嵌套查询。例如,

select * from table1 where table1.name in (select name from table2);

这假设有一个列"名称"在表1中。此查询的结果应返回table2中table1中的行。