什么情况下,下列语句会输出 t1_view 总行数?
select count(*) from t1_view where id not in (select id from t1_view);
以下为操作:
create table t1 (id int primary key);
create table t2 (id int primary key);
insert t1 values (1),(2),(3);
insert t2 values (1);
create view t1_view as select a.id from t1 a join t2 order by a.id;
MariaDB [tmp]> select count(*) from t1_view where id not in (select id from t1_view);
+----------+
| count(*) |
+----------+
| 3 |
+----------+
1 row in set (0.00 sec)
MariaDB [tmp]> select count(*) from t1_view a where not exists (select id from t1_view b where a.id=b.id);
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.00 sec)
当前用 not exists 结果合理,但在一些情况下也有问题.
MariaDB [tmp]> select count(*) from t1_view a where not exists (select id from t1 b where a.id=b.id);
+----------+
| count(*) |
+----------+
| 3 |
+----------+
1 row in set (0.00 sec)
不知道是什么情况,现在很混乱. 希望懂的人解释一下原因.
版本 10.1.29-MariaDB-6+b1 Debian buildd-unstable
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.