2011-02-15 24 views

cevap

1

Sen Genel tek yolu birden güncelleyebilirsiniz (RDBMS için veya CASE WHEN...) bir ORIF() fonksiyonu ile kombine maddesini

UPDATE tablename SET col1 = IF(id='2', '34355','152242') 
WHERE id='2' OR id='44' 
+1

Uzun bir dizi güncelleme için, bu iğrenç canavarlığı inşa etmek yerine bireysel güncelleme sorgularını yapmak daha kolay olurdu. Bu sürümün tek başı, işlem dışı farkında olan veritabanlarında bir işlemin benzetimini yapabilmesidir. –

+0

@ marc-b OP, 2 satır hakkında sordu. Başka bir dezavantaj, liste büyükse, ayrıştırıcı, bir dizin birleştirmesi yerine bir tablo taraması seçebilir. –

+1

Tek tek sorgular önerilmektedir. Cevap doğru, kullanmamanı tavsiye etmeme rağmen. – Kriem

0

kullanabilirsiniz Tek bir sorgudaki satırlar, konumunuzun birden çok satırla eşleşmesidir ... ve sonra her satırda aynı değer kümesi olur.

Geçmiş küme öğelerinizde ifadelerle garip şeyler yapabildiğinizden, ancak yapamayacağınız çok özel bir neden olmadıkça genellikle birden çok sorgu yapmak daha temizdir.

2

Emin. Sen-meli? Asla.

Kodunuzu beş yıl içinde arayan kişiyi düşünün. daha okunabilir Üstelik bu:

UPDATE tablename SET col1='34355' WHERE id='2'; 
UPDATE tablename SET col1='152242' WHERE id='44'; 

veya bu (Scrum Meister'in yanıt):

UPDATE tablename SET col1 = IF(id='2', '34355','152242') WHERE id='2' OR id='44'; 

ikincisi kısadır, ama buna ne yaptığını tam olarak anlamaya bir meydan okuma. Eğer yarış koşulları hakkında endişeleniyorsanız, o (en modern DBMS) tek bir işlem yapmak: Eğer başka hiçbir sorgu satır 2 güncellendiğinde çalıştırmak ancak 44 satır olacak garanti edilebilir

BEGIN; 
UPDATE tablename SET col1='34355' WHERE id='2'; 
UPDATE tablename SET col1='152242' WHERE id='44'; 
COMMIT; 

Bu şekilde değil.

4

Bu güncelleştirme için bir sanal harita tablosu kullanabilirsiniz.

update tablename 
inner join (
    select '34355' col1, '2' id union all 
    select '152242' col1, '44' id 
) map on map.id = tablename.id 
set tablename.col1 = map.col1 

Bu modelin kullanılması kolay genişletme sağlar (yalnızca satırları haritaya ekleyin). Ayrıca MySQL'in normal JOIN işlemi için tablename.id üzerinde daha fazla tahmin edilebilir bir dizin seçmesini sağlar.

+0

Vay. Bu sihir. – Almo

İlgili konular