2012-05-25 64 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。

我想這個查詢是組成的,但過濾和排序同一列的點是什麼?