sql - oracle sql结果不一致
问题描述
我有三个完全相同的 sql 查询。但是,其中之一不返回任何结果。我找不到该问题的适当解释。
任何人都可以
--returns one result
SELECT col1
FROM table1
WHERE col1 not IN
(select x.hesno from (SELECT c1||c2||c3 FROM Table2 S) x) ;
--returns no result
SELECT col1
FROM table1
WHERE col1 not IN
(SELECT c1||c2||c3 FROM table2) ;
--returns one result
SELECT col1
FROM Table1
WHERE NOT EXISTS (
SELECT 1 FROM table2 WHERE c1||c2||c3 = col1
);
这是表格说明
Table1
Name Null? Type
------ ----- -------------
COL1 VARCHAR2(15)
Table2
Name Null? Type
--------------- ----- -------------
C1 VARCHAR2(2)
C2 VARCHAR2(3)
C3 VARCHAR2(10)
解决方案
如果子查询在内部返回空值NOT IN ( subquery )
,则查询不会返回行。
下面的 SQL 返回12345
With WTH0 AS (
SELECT '12345' x FROM dual
),
WTH1 AS (
SELECT '1' c1, '2' c2, '3' c3 FROM dual
)
SELECT X
FROM WTH0
WHERE X NOT IN (SELECT C1||C2||C3 FROM WTH1);
然而
With WTH0 AS (
SELECT '12345' x FROM dual
),
WTH1 AS (
SELECT '1' c1, '2' c2, '3' c3 FROM dual union
SELECT null c1, null c2, null c3 FROM dual
)
SELECT X
FROM WTH0
WHERE X NOT IN (SELECT C1||C2||C3 FROM WTH1);
返回空结果集。
推荐阅读
- python - 使用 2D numpy 数组的每一行创建 1D numpy 数组的元组列表
- java - 如何使用 log4j2.properties 文件将不同级别的日志发送到不同的附加程序?
- python - 循环列表列表,但 if 语句似乎无法正常工作
- javascript - 推入数组并循环,直到数组长度达到3
- r - 根据其他列的条件选择列中的最大值
- angular - 在参数中访问自定义 RxJS 运算符中的流变量
- c# - 使用 Web SDK 构建交互式控制台应用程序
- python - 在 CPython 中,哪个结构用于实现用户定义的类及其实例
- c# - 如何在 MySql 和 C# 中存储存储过程选择查询的返回值
- java - 使用无效的 JAXP api 运行或使用 ant 实现 axis2