gpt4 book ai didi

mysql - 删除 NOT IN 与 NOT EXISTS 的差异

转载 作者:行者123 更新时间:2023-11-29 01:25:24 25 4
gpt4 key购买 nike

我有如下所示的两个场景,场景 1 和场景 2 一样有效,但是这两个场景都实现了相同的目标,注意,两个场景的 otherTbl 都是静态的

场景 1

CREATE TABLE `tbl`(
col1 VARCHAR(255),

PRIMARY KEY(col1)
) ENGINE='InnoDb';

这是我之前运行的一组查询,它们有意义并且运行良好。

#Create an exact copy of the `tbl`
CREATE TEMPORARY TABLE `tmp_tbl`( .. SAME AS `tbl` .. );

#Add grouped records from another table into `tmp_table`
INSERT INTO tmp_tbl SELECT col1 FROM otherTbl GROUP BY col1;

#Delete the tables that donot exist any more int the `otherTbl`
DELETE FROM tbl WHERE tbl.col1 NOT IN (SELECT col1 FROM tmp_tbl);

场景 2

在这种情况下,区别仅在于列,如您所见,它们都是主键

CREATE TABLE `tbl`(
col1 VARCHAR(255),
col2 VARCHAR(255),
col3 VARCHAR(255),

PRIMARY KEY(col1, col2, col3)
) ENGINE='InnoDb';

这是一组新的查询

#Create an exact copy of the `tbl`
CREATE TEMPORARY TABLE `tmp_tbl`( .. SAME AS `tbl` .. );

#Add grouped records from another table into `tmp_table`
INSERT INTO tmp_tbl
SELECT col1, col2, col3 FROM otherTbl GROUP BY col1, col2, col3;

#Delete the tables that donot exist any more int the `otherTbl`
DELETE FROM tbl WHERE NOT EXISTS(SELECT col1, col2, col3 FROM `tmp_tbl`);

问题很简单,他们是否得出相同的结论因此,如果我们将场景 1 中的删除查询从 NOT IN 替换为 NOT EXISTS,它仍然会正常工作方式。

*****简单版*****

是:

DELETE FROM `tbl` WHERE tbl.col1 NOT IN (SELECT col1 FROM tmp_tbl);

等于:

DELETE FROM `tbl` WHERE NOT EXISTS(SELECT col1 FROM `tmp_tbl`);

最佳答案

我还没有测试过,但它们很可能不等同。如果与相关子查询一起使用,NOT EXISTS 形式将有意义。但是您的子查询不包含对外部查询的任何引用,因此第二种形式可能根本不会删除任何行。

此外,表中存在 NULL 可能会使这两种形式的行为截然不同。

关于mysql - 删除 NOT IN 与 NOT EXISTS 的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2212704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com