MySQL:根据条件更新表中的列

MySQL:根据条件更新表中的列,mysql,sql,select,sql-update,Mysql,Sql,Select,Sql Update,我有这个疑问 SELECT *, min(id) FROM mytable WHERE col2='specval' GROUP BY col3 这将选择我需要的行 我想订一套 UPDATE mytable set col4 = col3+1000 分别用于上面选择的行 那么,如何通过分别为每个选定行将该表中的col4设置为col4=col3+1000来更新这些行呢 谢谢。您也可以在update子句中使用WHERE。因此,根据“选择”对您的意义(我从您的选择中猜测),您可能会执行以下操

我有这个疑问

SELECT *, min(id) 
FROM mytable 
WHERE col2='specval' 
GROUP BY col3
这将选择我需要的行

我想订一套

UPDATE mytable
set col4 = col3+1000
分别用于上面选择的行

那么,如何通过分别为每个选定行将该表中的col4设置为col4=col3+1000来更新这些行呢


谢谢。

您也可以在update子句中使用
WHERE
。因此,根据“选择”对您的意义(我从您的选择中猜测),您可能会执行以下操作:

UPDATE mytable
SET col4 = col3+1000
WHERE col2 = 'specval';
UPDATE mytable
set col4 = col3+1000
WHERE id in (
  SELECT * FROM (
    SELECT min(id) 
    FROM mytable 
    WHERE col2='specval' 
    GROUP BY col3
  ) as myids
);

您也可以在update子句中使用
WHERE
。因此,根据“选择”对您的意义(我从您的选择中猜测),您可能会执行以下操作:

UPDATE mytable
SET col4 = col3+1000
WHERE col2 = 'specval';
UPDATE mytable
set col4 = col3+1000
WHERE id in (
  SELECT * FROM (
    SELECT min(id) 
    FROM mytable 
    WHERE col2='specval' 
    GROUP BY col3
  ) as myids
);

您可以使用如下查询:

UPDATE mytable
SET col4 = col3+1000
WHERE col2 = 'specval';
UPDATE mytable
set col4 = col3+1000
WHERE id in (
  SELECT * FROM (
    SELECT min(id) 
    FROM mytable 
    WHERE col2='specval' 
    GROUP BY col3
  ) as myids
);

您可以使用如下查询:

UPDATE mytable
SET col4 = col3+1000
WHERE col2 = 'specval';
UPDATE mytable
set col4 = col3+1000
WHERE id in (
  SELECT * FROM (
    SELECT min(id) 
    FROM mytable 
    WHERE col2='specval' 
    GROUP BY col3
  ) as myids
);

您可以将更新与联接一起使用:

UPDATE mytable t1
        INNER JOIN
    (SELECT 
        col3, MIN(id) id
    FROM
        mytable
    GROUP BY col3) t2 ON t1.col3 = t2.col3 AND t1.id = t2.id 
SET 
    t1.col4 = t1.col3 + 1000;

您可以将更新与联接一起使用:

UPDATE mytable t1
        INNER JOIN
    (SELECT 
        col3, MIN(id) id
    FROM
        mytable
    GROUP BY col3) t2 ON t1.col3 = t2.col3 AND t1.id = t2.id 
SET 
    t1.col4 = t1.col3 + 1000;

select*,min(id)
不选择每组中id最小的行。它选择最小id,但其他列来自组中的随机行,而不是最小id所在的行。有关如何获取正确的行,请参阅。
select*,min(id)
不会选择每个组中id最小的行。它选择最小id,但其他列来自组中的随机行,而不是最小id所在的行。请参阅以了解如何获取正确的行。您可以在那里插入任何您想要的内容。@Haradzieniec您可以像在
SELECT
查询中那样动态提供它。您可以在那里插入任何您想要的内容。@Haradzieniec您可以像在
SELECT
查询中那样动态提供它。我更喜欢这样解决方案这肯定更符合MySQL的精神。我更喜欢这个解决方案。这肯定更符合MySQL的精神。