MySQL takas sütun değerleri
Ben bir MySQL tablo ile koordinatları, sütun adları X ve Y Şimdi istiyorum takas sütun değerleri bu tablo, böylece X olur Y ve Y olur X en belirgin çözüm olurdu sütunları yeniden adlandırma, ama ben yapamam yapısı değiştiği için bilmiyorum mutlaka izinleri var.
Bunu yapmak mümkündürGÜNCELLEMEbir şekilde?SET X=,=X UPDATE tablo Yaçıkçası istediğim şey yapmayacağım.
< / ^ hr .
Edit: Lütfen izinleri, yukarıda bahsedilen, benim kısıtlama etkili ALTER TABLE kullanımını veya tablo/veritabanı yapısını değiştiren diğer komutları engeller unutmayın. Sütunları yeniden adlandırma veya yenilerini ekleyerek ne yazık ki seçenek değildir.
CEVAP
Aynen uğraşmak zorunda ve benim bulgular özetleyeyim.
UPDATE table SET X=Y, Y=X
Bu yaklaşım, belli ki sadece Y. için her iki değer çıkacak gibi çalışamazBurada geçici bir değişken kullanan bir yöntem. İçin http://beerpla.net/2009/02/17/swapping-column-values-in-mysql/ yorum Antony sayesinde "DEĞİL" tweak. NULL O olmadan, sorgu beklenmedik bir şekilde çalışır. Tablo yazının sonunda şemaya bakın. Bu yöntem, eğer bunlardan biri NULL değerleri takas yok. Yöntem bu sınırlama yok #3 kullanın.
UPDATE swap_test SET x=y, y=@temp WHERE (@temp:=x) IS NOT NULL;
Bu yöntem, yine http://beerpla.net/2009/02/17/swapping-column-values-in-mysql/ yorum Dipin tarafından teklif edildi. En şık ve temiz çözüm bence. BOŞ ve BOŞ olmayan iki değerleri ile çalışır.
UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;
Ben uydurdum onu başka bir yaklaşım, iş gibi görünüyor:
UPDATE swap_test s1, swap_test s2 SET s1.x=s1.y, s1.y=s2.x WHERE s1.id=s2.id;
Aslında, 1 tablo bir güncelleme oluyor ve 2. bir eski verileri çekmek için kullanılır.
Bu test benim şema:
CREATE TABLE `swap_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`x` varchar(255) DEFAULT NULL,
`y` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
INSERT INTO `swap_test` VALUES ('1', 'a', '10');
INSERT INTO `swap_test` VALUES ('2', NULL, '20');
INSERT INTO `swap_test` VALUES ('3', 'c', NULL);
Ben başvuru belirli bir tablo yabancı ...
Nasıl MySQL veritabanı / tablo / sütun...
Bayt mysql int(11) sütun boyutu nedir?...
İkinci tablo fazladan bir sütun olması...
Raylar: bir sütun benzersiz değerleri ...