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的精神。