加入 sqlite 中的 Update 语句

Pyd*_*aju 3 sqlite join 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');
Run Code Online (Sandbox Code Playgroud)

我在 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(因为两个表中的 emailids 相同)

3)我不想更新 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
Run Code Online (Sandbox Code Playgroud)

Jos*_*ira 5

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
                 );
Run Code Online (Sandbox Code Playgroud)