2016-04-09 25 views
0

Kullanıcının özelleştirebileceği ve sitemi değiştirebileceği bir tablo şeması var. Örneğin, bir 'karanlık' düzeni ve bir 'ışık' düzeni. Hangi kullanıcının hangi şemaya sahip olduğunu kontrol ederek bu tabloyu güncellemenin bir yolunu istiyorum, bu yüzden bir şema/kullanıcı kombinasyonunu iki kez eklemiyorum.SQL INSERT IGNORE Değerlerin benzersiz birleşimi

| userid | schemename | background | text | 
--------------------------------------------------- 
| 1  | dark  | black  | white | 
| 1  | light  | white  | grey | 
| 2  | dark  | black  | white | 
| 2  | light  | white  | grey | 
etc. 

Ben usta şemaları ile senkronize bu şemaları tutan bir güncelleme komut dosyası var - bu yüzden kullanıcı grubu sil olursa onlar tekrar senkronize edebilirsiniz usta ile şemaları. Kullanıcının tablodaki halihazırda mevcut değilse, yalnızca şemaya eklenecek bir ek ifadeye ihtiyacım var. INSERT IGNORE veya benzer bir şey kullanabilir miyim?

+0

bir göz atın yan tümcesinde bir katiyen yapabilirsiniz [bu] (http://stackoverflow.com/a/548570/3294262) – fusion3k

cevap

0

Sen

insert into your_destination_table (user_id, schemename, background, text) 
select user_id, schemename, background, text 
from your_source_table 
where (user_id, schemename) not in 
    (select user_id, schemename, background, text 
    from your_destination_table); 
+0

bu çoklu uçlar ile birleştirebilirsiniz? "INSERT INTO (=)) (değerler), (değerler), (değerler) WHERE (userid, schemename) YOK (select seçin)' –

+0

"Tablodaki sütunların sayısı ve türü (sütun, ....) .)." yan tümce, "değerler (sütunlar, ....) içindeki sütunların sayısı ve türü ile eşleşmelidir. komut dosyası bu şekilde saygı duymazsınız ... ve birden çok ekleme eklemek için ... komut dosyası seçili tüm satırı ekle .. ..Geliştirme ihtiyacınızı daha iyi açıklayın – scaisEdge

+0

Seçme yetkiniz yoksa bir şartı kullanamazsınız .. – scaisEdge