Join

在 sqlite 中加入 Update 語句

  • September 6, 2017
CREATE TABLE Table_1 (
   Id INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL ,
   EmailId VARCHAR
)

INSERT INTO Table_1 VALUES (1,'raj@gmail.com');
INSERT INTO Table_1 VALUES (3,'test@gmail.com');
INSERT INTO Table_1 VALUES (4,'false5@gmail.com');
INSERT INTO Table_1 VALUES (7,'false55@gmail.com');
INSERT INTO Table_1 VALUES (8,'falsefalse@gmail.com');
INSERT INTO Table_1 VALUES (9,'true1@gmail.com');
INSERT INTO Table_1 VALUES (11,'true2@gmail.com');
INSERT INTO Table_1 VALUES (12,'falsefalsefalse@gmail.com');
INSERT INTO Table_1 VALUES (13,'ravi@gmail.com');
INSERT INTO Table_1 VALUES (14,'rak@gmail.com');
INSERT INTO Table_1 VALUES (15,'false@gmail.com');
INSERT INTO Table_1 VALUES (16,'false66@gmail.com');


CREATE TABLE Table_2 (
   Id INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL ,
   EmailId VARCHAR
)

INSERT INTO Table_2 VALUES (1,'raj@gmail.com');
INSERT INTO Table_2 VALUES (3,'test@gmail.com');
INSERT INTO Table_2 VALUES (4,'false98@gmail.com');
INSERT INTO Table_2 VALUES (7,'abc@gmail.com');
INSERT INTO Table_2 VALUES (8,'ta@gmail.com');
INSERT INTO Table_2 VALUES (9,'false1@gmail.com');
INSERT INTO Table_2 VALUES (11,'false2@gmail.com');
INSERT INTO Table_2 VALUES (12,'false@gmail.com');
INSERT INTO Table_2 VALUES (13,NULL);
INSERT INTO Table_2 VALUES (14,NULL);
INSERT INTO Table_2 VALUES (15,'false@gmail.com');
INSERT INTO Table_2 VALUES (16,'false66@gmail.com');

我在 sqlite 中有兩個表,比如Table_1Table_2

我需要根據以下條件更新整個Table_1 EmailIds使用table_2 EmailIds

條件-1)

  • 當 Table_1 EmailId<>table_2 EmailId 需要更新(到所有行)

條件-2)

  • 如果 Table_2 EmailId 為空,則不需要更新 Table_1 特定 EmailId 中的空值

根據上面的表格和我的要求,我想要下面的輸出:-

  1. 我要更新 4,7,8,9,11,12 的 ID

2)我不想更新 1、3、15、16 個 ID(因為兩個表中的電子郵件 ID 相同)

  1. 我不想更新 13,14 Id (因為 13, 14 emailid 是 Table_2 中的空值)

對於上述問題,我在 MYSQL 和 SQL Server 中編寫了下面的查詢,它工作正常,但在 sqlite 中它不工作。

我發現 Joins 在 sqlite 的 Update 語句中不起作用,但我想要一個替代解決方案。有人可以幫我嗎?

UPDATE Newcontacts n
 JOIN DummyContacts d  ON (n.Id=d.Id)
SET n.EmailId=d.EmailId
WHERE n.EmailId&lt;&gt;d.EmailId
 OR d.EmailId IS NOT NULL
UPDATE Table_1
SET EmailId = (SELECT d.EmailId
                FROM Table_2 d
                WHERE Table_1.Id = d.Id
                )
WHERE EXISTS (SELECT d.EmailId
                FROM Table_2 d
                WHERE Table_1.Id = d.Id
                  AND Table_1.EmailId &lt;&gt; d.EmailId
                  AND d.EmailId IS NOT NULL
                );

引用自:https://dba.stackexchange.com/questions/74651