我不了解这种情况下的行为。据我了解,带有无效子查询的查询应导致错误。但在此示例中,它返回一些行。
测试数据:
create table test_values ( tst_id number, tst_id2 number, tst_value varchar2( 10 ) );
create table test_lookup ( tst_id number, tst_value varchar2( 10 ) );
insert into test_values( tst_id, tst_id2, tst_value ) values ( 1, 2, 'a' );
insert into test_values( tst_id, tst_id2, tst_value ) values ( 1, 2, 'b' );
insert into test_values( tst_id, tst_id2, tst_value ) values ( 2, 2,'c' );
insert into test_values( tst_id, tst_id2, tst_value ) values ( 2, 2,'d' );
insert into test_lookup( tst_id, tst_value ) values ( 1, 'findMe' );
commit;
可以正常工作:
select * from test_values where tst_id in ( select tst_id from test_lookup where tst_value = 'findMe' );
/*
TST_ID TST_ID2 TST_VALUE
---------- ---------- ----------
1 2 b
1 2 a
*/
select tst_id2 from test_lookup where tst_value = 'findMe';
--ORA-00904: "TST_ID2": invalid identifier
但是下面的查询也是在检索行,显然是通过从“ test_values”表中获取“ test_id2”列,而不是从子查询中所述的“
test_lookup”表中获取,尽管未在内部和外部使用别名部分。
select * from test_values where tst_id in ( select tst_id2 from test_lookup where tst_value = 'findMe' );
/*
TST_ID TST_ID2 TST_VALUE
---------- ---------- ----------
2 2 c
2 2 d
*/
原因是因为当子查询中不存在非别名列,但外部查询中确实存在非别名列时,Oracle会假定您正在从外部查询中引用该列。
使用别名,您感到困惑的查询看起来像:
select *
from test_values tv
where tv.tst_id in (select tv.tst_id2
from test_lookup tl
where tl.tst_value = 'findMe');
希望这可以使事情变得更清楚?
您所看到的问题是一个很好的示例,说明了为什么始终应使用列来自哪个表来标记您的列-这样可以更轻松地维护查询的开始!
当“事件ID”与“用户ID”匹配时,im会尝试从我的“事件”表中选择所有数据。然而,我得到一个错误1242,子查询返回超过1行。 我理解我的子查询将返回多行,因为一个用户可以参加多个事件。那么我如何使我的查询接受多行呢?
问题内容: 此查询有什么问题? 我有错误 ORA-01427:单行子查询返回多个行 01427。00000-“单行子查询返回多个行” 问题答案: 这是您的查询: 这样使用的子查询称为 标量子查询 。可以在可以使用标量值(即单个值,例如数字或字符串)的地方使用此类子查询。 标量子查询必须满足两个条件: 它最多返回一行。 它返回一列。 您的解决方案很简单,使用以下命令: 或者,在Oracle 12C中
问题内容: 当我尝试运行以下查询时出现错误: 是什么导致此错误? 问题答案: 将一个返回多列的子查询放在列表中,然后从中选择。 首先,相关子查询将是一个坏主意。但是,您的查询甚至没有关联,但是 没有关联 (没有链接到外部查询),并且似乎返回了多行。这导致产生笛卡尔积的(可能非常昂贵且荒谬的)交叉连接,可能不是您的(秘密)意图。 看起来您确实想要: 两者也都是毫无意义的。WHERE条件将一个强制为a
我有一个RecyclerView适配器,它可以处理我已经使用多年的几种视图类型。最近,我发现了关于,但我似乎遇到了一个问题,它似乎为返回了错误的值。 我有一个用例,我想显示一个标题,下面是一个项目列表。我已经为标题创建了一个新的适配器类,但是列表项将继续使用我的旧适配器(它还处理其他几种视图类型)。 因此,我连接了两个适配器: 这工作正常,但是当我打开活动时,它立即崩溃并给出错误: JAVAlan
问题内容: 如果返回0行,那么我需要。是否可以在带有条件语句的单个MySQL查询中执行此操作? 编辑: 所有答案均有效,但前提是两个查询均从同一表(或具有相同列数的表)中选择。如果第二个查询应用于具有联接的其他表上怎么办? 让我写下我的查询以使问题更清楚: 第一: 如果第一个结果为空,则: 第二名: 如果返回第一个查询,我将使用第一个查询的行,否则将使用第二个查询。 问题答案: 从我刚刚进行的快速
在最新版本的Xcode中构建应用程序时,我会遇到以下错误: 致命错误:格式错误或损坏的AST文件:“无法加载模块”/users/me/library/developer/xcode/developer/xcode/deriveddata/moduleCache/xyzyie6zv0op/darwin.pcm“:找不到文件”注意:修改系统标头后,请删除位于“/users/me/library/dev