2012-05-25 57 views
1

我看过非常相似,如果在这里不是相同的问题,但我试图将下面的查询转换为UPDATE语句的试验失败。与UPDATE查询混淆。如何转换选择更新与MySQL?

SELECT table.* FROM table JOIN (
    SELECT column, COUNT(*) AS rank 
    FROM  table 
    GROUP BY column 
) AS t USING (column) WHERE t.rank = 1 
ORDER BY t.rank DESC 

我想更新使用上述查询选择的所有结果列。

如何将其转换为更新声明?

谢谢。

+0

[MySQL UPDATE语法支持连接...](http://dev.mysql.com/doc/refman/5.5/en/update.html)也就是说,目前尚不清楚你要更新什么。 –

+0

特别是,你在尝试更新子查询中的等级值还是将某些东西设置为rank = 1的常量? –

+0

你好,有人与我的问题编辑混乱。正如我在我原来的Q中所说的,在这里,我想更新表格中任何一列的“列”。 – Phil

回答

2

这应做到:

update table 
set column = 'somevalue' 
where id in 
(select id from (

SELECT table.* FROM table JOIN (
    SELECT column, COUNT(*) AS rank 
    FROM  table 
    GROUP BY column 
) AS t USING (column) WHERE t.rank = 1) x) 
+0

我认为需要更新排名而不是'somevalue' –

+1

@Sudhakar这不是我所知道的问题... *我想更新所有结果的**列** ... * – Icarus

+0

是的,这是真的。 –

0

不能完全肯定,但我认为它像

update tblname set columname = value where tblname.columncompare = (select statement) 
0
INSERT INTO table (id, value) 
SELECT table.id, table.value 
FROM table 
JOIN (
    SELECT column, COUNT(*) AS rank 
    FROM  table 
    GROUP BY column 
) AS t USING (column) 
WHERE t.rank = 1 
ORDER BY t.rank DESC 
ON DUPLICATE KEY UPDATE value = VALUES(value) 

Insert on duplicate来救援!

基本上,这可以让你做任何选择正常,然后你预先插入插入并追加ON DUPLICATE。

我想这个查询是组成的,但过滤和排序同一列的点是什么?