2013-12-10 153 views
1

我有兩個表TT1 牛逼查詢使用MySQL更新

id p o 
1 47 1 
2 47 2 
3 47 25 

T1

id p  
1 47 
2 48 
3 49 

我希望找到一種方式來獲得T,則下面的表

 id p o 
    1 47 1 
    2 47 2 
    3 47 0 

如果T.p in (select T1.p from T1)和該字段的值爲o是最大然後更新o0。 我試試下面的查詢,但它並沒有提前上班

Update T 
SET T.o=0 
WHERE T.P IN (select T1.p from T INNER join select T.p from T ON T.p=T1.p) 
AND T.o In (select Max(T.o) from T) 

詳情Sqlfiddle

非常感謝。

+0

做你的 '真實' 這個數據庫更新查詢工作?它不能在sqlfiddle頁面上工作,因爲你不能更新這些表,只允許SELECT語句。 – BWS

+1

@BWS你可以運行更新,在左側刪除。 – Mihai

+1

那麼,你去...我今天學到了一些新東西!謝謝! – BWS

回答

2

SQL Fiddle

Update T 
SET T.o=0 
WHERE T.P IN (select T1.p from t1) 
AND t.o IN (SELECT * FROM(SELECT MAX(t.o) FROM t)x) 
1

嘗試這樣:

UPDATE T 
SET T.o=0 
WHERE T.p in (select T1.p from T1) 
AND T.o In (select Max(T.o) from T) 
+0

在mysql中,您不能直接在FROM子句中指定更新的表。 – Mihai

+0

這是正確的! – flashdisk