web-dev-qa-db-ja.com

SQLiteのUpdateステートメントでの結合

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_1Table_2のような2つのテーブルを持っています

Table_1 EmailIds全体を以下の条件に基づいてtable_2 EmailIdsを使用して更新する必要があります

状態-1)

  • table_1 EmailId <> table_2 EmailIdのとき(すべての行に対して)更新する必要があります

状態-2)

  • Table_2 EmailIdがnullの場合、Table_1固有のEmailIdでそのnull値を更新する必要はありません

上記の表のように、私の要件の下に出力が必要です:-

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
3
Pydi Raju
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
                 );
5
JoseTeixeira