1

我在这里看到了非常相似的问题,但我尝试将以下查询转换为 UPDATE 语句的尝试失败了。

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

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

如何将其转换为更新语句?

谢谢你。

4

3 回答 3

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)
于 2012-05-25T13:46:47.483 回答
0

不完全确定,但我认为它类似于

update tblname set columname = value where tblname.columncompare = (select statement)
于 2012-05-25T13:47:31.203 回答
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)

插入副本以进行救援!

基本上,这允许您像往常一样执行任何 SELECT,然后在 INSERT INTO 前面加上 ON DUPLICATE。

我猜这个查询是组成的,但是过滤和排序同一列有什么意义呢?

于 2012-05-25T14:07:33.840 回答