2016-10-21 8 views
0

私は両方ともキーとしてPhraseIdを持つ2つのテーブルを有する:SQLを使用して2つのSQLiteテーブルを同期するにはどうすればよいですか?

Phrase containing 
     PhraseId, name and score column 
PhraseSource containing 
     PhraseId and name column 

PhraseSourceテーブルが更新中に移入され、それがより少ない、同じ列以上を有していてもよいです。彼らは名前がPhraseSourceやフレーズが異なるフレーズテーブルに

  • 更新行をPhraseSourceには存在しなくフレーズ場合

    は私が

    1. コピーし、新しい行することができる方法は、フレーズテーブルにあります
    2. これらの行は、フレーズ中に存在するが、私はフレーズテーブルのスコアデータを保存する必要はないフレーズ源で

    注あるフレーズテーブルの

  • 削除行。

  • 答えて

    0

    簡単:

    DELETE FROM Phrase; 
    INSERT INTO Phrase SELECT * FROM PhraseSource; 
    

    しかし

    アップデートが小さくない場合には、より効率的で説明するようにそれをやって:

    INSERT INTO Phrase 
    SELECT * FROM PhraseSource 
    WHERE PhraseId NOT IN (SELECT PhraseId FROM Phrase); 
    
    UPDATE Phrase 
    SET name = (SELECT name 
          FROM PhraseSource 
          WHERE PhraseId = Phrase.PhraseId) 
    WHERE name <> (SELECT name 
           FROM PhraseSource 
           WHERE PhraseId = Phrase.PhraseId); 
    
    DELETE FROM Phrase 
    WHERE PhraseId NOT IN (SELECT PhraseId FROM PhraseSource); 
    
    関連する問題