【问题标题】:SQL query SELECT FROM [Select value from tablename]SQL 查询 SELECT FROM [从表名中选择值]
【发布时间】:2016-04-07 17:34:39
【问题描述】:

我正在尝试从名称在另一个表中的表中获取数据。

select * from (select tab1.value from tab1 join tab2 on tab1.id = tab2.id)

当我尝试这个时,我得到 tab1.value 而不是外部选择 *

有没有办法从外部选择中获取数据?

让我把它分成两个 sql 语句,这样会更容易一些

1) select tab1.value from tab1 join tab2 on tab1.id = tab2.id

使用上面的 tab1.value 作为 2) 的表名

2) 从 tab1.value 中选择 *

【问题讨论】:

  • 你不能用纯 SQL 做到这一点。为此,您需要动态 SQL。
  • 查询正确。它显示了您的内部查询中的所有行。如果您能更好地解释您的需求,我们可能会为您提供帮助。
  • 外部查询的表名作为一行存储在内部查询的其中一个表中。我需要查找该值并从中获取数据
  • 假设 tab1.value 是一个字符串 - 你不想从 tab1.value 中选择 *,你想从名称为 tab1.value 的表中选择 *。那不是一回事。如果您的第一个表是 tab1,则从中选择的方法是 select ... from tab1,而不是 from 'tab1'(tab1 显示为字符串)。正如 a_horse... 所说,您需要为此使用动态 sql。

标签: sql oracle


【解决方案1】:

在您的查询中,外部查询唯一可以选择的是您从内部查询中获得的内容。如果您希望外部选择查询执行更多操作,则需要为其提供更多功能,而不仅仅是内部查询。

【讨论】:

    【解决方案2】:

    本质上,“select *”是从您的内联视图返回结果集。如果您想显示来自 tab1 的更多信息,则需要使用它。事实上,您根本不需要这样做:

    select tab1.value, tab1.other_column, tab1.other_column_i_want, etc 
      from tab1
      join tab2 on tab2.id = tab1.id;
    

    不需要内联视图。顺便说一句,“SELECT *”是不好的做法。

    这样想:如果我要求您从钥匙圈中取出一把钥匙,然后期望您的钥匙圈中的所有钥匙作为答案的一部分,您会认为我(充其量)松了一个螺丝。

    您最初要求的是 tab1.value。您不能从该结果集中提取其他列。

    【讨论】:

    • 我想从 tab1.other_column_i_want 中选择 *
    • 这完全没有意义。你告诉你的外部查询“我只会提供 tab1.value。”您不能从该内部查询(称为内联视图)中提取其他列,因为它们实际上不存在于该结果集中。所以,要么你没有解释你想要什么,要么你不理解 select 语法。 “SELECT *”的意思是“给我我的源包含的所有列中的所有数据。你的内部查询只包含一列,tab1.value。
    • tab1.other_column_i_want 是一个表名,它作为一行存储在 tab1 中。获取表名以获取更多信息。我更新了原始线程以使其更易于理解。抱歉,如果之前的帖子没有意义
    • 好的,我明白了这个问题。想象一下 tab1 由列 ID、NAME、FAVORITE_COLOR、BEST_MEAT_PRODUCT 组成。 “SELECT *”的意思是“让我从 tab1 的所有列中获取所有内容”。 “where”子句限制了我的搜索条件。因此,“从 tab1 中选择 *,其中 BEST_MEAT_PRODUCT='Baloney';”表示“从 tab1 中选择 ID、NAME、FAVORITE_COLOR、BEST_MEAT_PRODUCT,其中 BEST_MEAT_PRODUCT='Baloney';”。
    • 好的——重读一遍。这只能使用编程功能来完成。您不能用值替换基本 SQL 中的 object_name。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    相关资源
    最近更新 更多