CREATE TABLE Table_1 (
Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,
EmailId VARCHAR
)
INSERT INTO Table_1 VALUES (1,'[email protected]');
INSERT INTO Table_1 VALUES (3,'[email protected]');
INSERT INTO Table_1 VALUES (4,'[email protected]');
INSERT INTO Table_1 VALUES (7,'[email protected]');
INSERT INTO Table_1 VALUES (8,'[email protected]');
INSERT INTO Table_1 VALUES (9,'[email protected]');
INSERT INTO Table_1 VALUES (11,'[email protected]');
INSERT INTO Table_1 VALUES (12,'[email protected]');
INSERT INTO Table_1 VALUES (13,'[email protected]');
INSERT INTO Table_1 VALUES (14,'[email protected]');
INSERT INTO Table_1 VALUES (15,'[email protected]');
INSERT INTO Table_1 VALUES (16,'[email protected]');
CREATE TABLE Table_2 (
Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,
EmailId VARCHAR
)
INSERT INTO Table_2 VALUES (1,'[email protected]');
INSERT INTO Table_2 VALUES (3,'[email protected]');
INSERT INTO Table_2 VALUES (4,'[email protected]');
INSERT INTO Table_2 VALUES (7,'[email protected]');
INSERT INTO Table_2 VALUES (8,'[email protected]');
INSERT INTO Table_2 VALUES (9,'[email protected]');
INSERT INTO Table_2 VALUES (11,'[email protected]');
INSERT INTO Table_2 VALUES (12,'[email protected]');
INSERT INTO Table_2 VALUES (13,NULL);
INSERT INTO Table_2 VALUES (14,NULL);
INSERT INTO Table_2 VALUES (15,'[email protected]');
INSERT INTO Table_2 VALUES (16,'[email protected]');
私はsqliteにTable_1
とTable_2
のような2つのテーブルを持っています
Table_1 EmailIds
全体を以下の条件に基づいてtable_2 EmailIds
を使用して更新する必要があります
状態-1)
状態-2)
上記の表のように、私の要件の下に出力が必要です:-
1)4、7、8、9、11、12 IDを更新したい
2)1,3,15,16 IDを更新したくない(両方のテーブルで同じメールIDを使用しているため)
3)13,13のIDを更新したくない(13、14のemailidがTable_2のnull値であるため)
上記の問題について、以下のクエリをMYSQLおよびSQL Serverで記述しましたが、正常に機能しますが、sqliteでは機能しません。
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
);