我有两个方案表示如下,方案1名的作品以及场景2,但都是这些场景实现同样的目标,在这两个方案的otherTbl
注意的是静态DELETE差异NOT IN VS NOT EXISTS
情景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`);
的问题简单说就是,难道他们阿智如果我们在SCENARIO 1中将NOT IN
替换为NOT EXISTS
的删除查询,它仍将以相同的方式工作。
******简单的版本******
是:
DELETE FROM `tbl` WHERE tbl.col1 NOT IN (SELECT col1 FROM tmp_tbl);
Equall要:
DELETE FROM `tbl` WHERE NOT EXISTS(SELECT col1 FROM `tmp_tbl`);
谢谢。有没有办法解决它。我可以使用另一个查询来解决我的NOT IN问题吗? – 2010-02-07 05:58:23
你可以发布相关查询的例子吗?这将不胜感激:D – 2010-02-07 07:43:32