güncelleme kendiliğinden tablosu: verilerinin altındaki ilenasıl Mysql MySQL bir tablo var iş
CREATE TABLE test.tem(a INT,b INT);
:
INSERT INTO test.tem VALUES(1,2),(1,1),(1,NULL),(2,3);
Şimdi veri olmalıdır:
+------+------+
| a | b |
+------+------+
| 1 | 2 |
| 1 | 1 |
| 1 | NULL |
| 2 | 3 |
+------+------+
İstiyorum sütun b'yi min (b) grubuna sütun a'ya göre güncelleştirin.
UPDATE test.tem o
SET o.b = (SELECT
MIN(b)
FROM test.tem i
WHERE i.a = o.a)
Ama MYSQL SQL iyi performansla sorumu çözebilir aşağıda düşünüyorum
Yani FROM yan tümcesinde güncelleştirme için hedef tablo belirtilemiyor:
Yani SQL olmalıdırUPDATE test.tem t1
JOIN test.tem t2
ON t1.a = t2.a
SET t1.b = t2.b
WHERE t1.b IS NULL
OR t1.b > t2.b;
Ama sonucudur:
+------+------+
| a | b |
+------+------+
| 1 | 1 |
| 1 | 1 |
| 1 | 2 |
| 2 | 3 |
+------+------+
Aslında ihtiyacım sonucudur:
+------+------+
| a | b |
+------+------+
| 1 | 1 |
| 1 | 1 |
| 1 | 1 |
| 2 | 3 |
+------+------+
Soru 1: Neden MYSQL SQL ile yanlış sonuç çalışmak? İyi verimli doğru SQL ne olmalı?
Soru 2: Sadece NULL değeriyle güncellemek istediğimde SQL'in ne olması gerekir (sadece üçüncü kaydı güncelleştirin)?
UPDATE test.tem t1
JOIN test.tem t2
ON t1.a = t2.a
AND t1.b IS NULL
SET t1.b = t2.b
WHERE t1.b IS NULL
OR t1.b > t2.b;
Bu sizin SQL kullanarak 4.5 milyon kayıtları ile tek tabloda güncellemek için yaklaşık 5 dakika sürer. SQL'imin hatasını öğrenmeme yardım edebilir misin? – bluearrow
@bluearrow Bu farklı bir konu olduğundan, tablonuzun yapısını (dizininiz dahil), isteğinizi ve [sorgu planını] (http://dev.mysql.com/doc/refman) sağlayarak başka bir soru sormalısınız. /4.1/en/execution-plan-information.html). –
Cevabınızı bekliyoruz: http://stackoverflow.com/questions/18117717/mysql-join-update-internal-steps – bluearrow