SQL 查询 SELECT FROM [从表名中选择值]

Posted

技术标签:

【中文标题】SQL 查询 SELECT FROM [从表名中选择值]【英文标题】:SQL query SELECT FROM [Select value from tablename] 【发布时间】: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。 查询正确。它显示了您的内部查询中的所有行。如果您能更好地解释您的需求,我们可能会为您提供帮助。 外部查询的表名作为一行存储在内部查询的其中一个表中。我需要查找该值并从中获取数据 Oracle: Trying to loop thru insert statement using dynamic list of table names的可能重复 假设 tab1.value 是一个字符串 - 你不想从 tab1.value 中选择 *,你想从名称为 tab1.value 的表中选择 *。那不是一回事。如果您的第一个表是 tab1,则从中选择的方法是 select ... from tab1,而不是 from 'tab1'(tab1 显示为字符串)。正如 a_horse... 所说,您需要为此使用动态 sql。 【参考方案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。

以上是关于SQL 查询 SELECT FROM [从表名中选择值]的主要内容,如果未能解决你的问题,请参考以下文章

select 连接查询语句 SQL语句查询

大量查询SQL语句 实例

sql 查询语句

常用的SQL语句

SQL查询日期:

SQL结构化查询语——之DQL语言