Join
在 sqlite 中加入 Update 語句
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_1
和Table_2
我需要根據以下條件更新整個
Table_1 EmailIds
使用table_2 EmailIds
條件-1)
- 當 Table_1 EmailId<>table_2 EmailId 需要更新(到所有行)
條件-2)
- 如果 Table_2 EmailId 為空,則不需要更新 Table_1 特定 EmailId 中的空值
根據上面的表格和我的要求,我想要下面的輸出:-
- 我要更新 4,7,8,9,11,12 的 ID
2)我不想更新 1、3、15、16 個 ID(因為兩個表中的電子郵件 ID 相同)
- 我不想更新 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<>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 <> d.EmailId AND d.EmailId IS NOT NULL );