2010-07-26 12 views
11

Ne yapmak istiyorum:MySQL sorgu max (alan) + alanını güncelleştirmek için 1

UPDATE table SET field = MAX(field) + 1 WHERE id IN (1, 3, 5, 6, 8); 

bu ifadenin anlambilim, aklımda, ilk veritabanı çıkmak ve için belirleyeceğini olurdu field'un en büyük değeri table'un tümünde. Daha sonra bu değere 1 ekleyin ve id 1, 3, 5, 6 ve 8 ile satırların field sütununa sonuç değerini atayın. Yeterince basit görünüyor ...

Bunu çalıştırmaya çalıştığımda sorgu olsa MySQL üzerine bobinleri ve der ki:

ERROR 1111 (HY000): Invalid use of group function 

ben arzu sonucu almak için kullanmak zorunda gizli sos nedir?

Selamlar, Vic

cevap

18

Açıkça Here çaldi

UPDATE TABLE set field = ((SELECT selected_value FROM (SELECT MAX(field) AS selected_value FROM table) AS sub_selected_value) + 1) WHERE id in (1,3,5,6,8) 

deneyin

+0

hile yaptı! – vicatcu

+1

+1: İki dakikadan fazla yendiysem bile –

+1

Beni yendin, ama bir kapanış parantezinde eksiksin: P – GWW

5

, mysql-error-1093 aşmanın bir alt sorgu/türetilmiş tablo/satır içi görünümünü kullanmak amacıyla:

UPDATE table 
     SET field = (SELECT x.max_field 
          FROM (SELECT MAX(t.field) + 1 AS max_field 
             FROM TABLE t 
             WHERE t.id IN (1,3,5,6,8)) x) 
+0

t.id sonra bir ayraç eksik IN (1,3,5,6,8) **) ** x) ' – Ultrazz008