2013-12-10 110 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