我有兩個方案表示如下,方案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