【发布时间】:2019-01-15 09:41:02
【问题描述】:
我有三个完全相同的 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 不会返回任何行。
-
“我有三个完全相同的 sql 查询”——这显然不是真的;也许您的意思是它们(您相信)在逻辑上是相同的?但是,您的第一个甚至无效,因为内部子查询没有
hesno的别名。如果您从前两个中得到不同的结果,并且存在该别名,那么这会稍微有趣一些;第三个得到与前两个不同的结果可能不是(参见关于空值的评论/答案)。无论哪种方式,请显示示例数据以及使用该数据获得的实际查询和结果。