我有这个疑问MySQL的:基于标准的表更新列
SELECT *, min(id)
FROM mytable
WHERE col2='specval'
GROUP BY col3
是选择我需要的行。
我想设置
UPDATE mytable
set col4 = col3+1000
上面分别选择的行。
那么,如何通过在该表中将col4分别设置为col4 = col3 + 1000来分别更新该行?
谢谢。
我有这个疑问MySQL的:基于标准的表更新列
SELECT *, min(id)
FROM mytable
WHERE col2='specval'
GROUP BY col3
是选择我需要的行。
我想设置
UPDATE mytable
set col4 = col3+1000
上面分别选择的行。
那么,如何通过在该表中将col4分别设置为col4 = col3 + 1000来分别更新该行?
谢谢。
你可以使用这样的查询:
UPDATE mytable
set col4 = col3+1000
WHERE id in (
SELECT * FROM (
SELECT min(id)
FROM mytable
WHERE col2='specval'
GROUP BY col3
) as myids
);
在mysql中不起作用 – GurV
@Gurwinder Singh - 现在它工作vi派生表 –
您也可以在update子句中使用WHERE
。因此,根据“选择了”是什么意思你(我是从你的SELECT猜测),你可能会做这样的事情:
UPDATE mytable
SET col4 = col3+1000
WHERE col2 = 'specval';
呃......'specval'就是这种情况下的问题......它是动态的...... – Haradzieniec
然后你可以插入任何你想要的东西。 –
@Haradzieniec您可以按照您在“SELECT”查询中所做的相同方式动态提供它。 – Barmar
你可以使用带有JOIN的UPDATE:
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;
我更喜欢这个解决方案。这绝对是MySQL的精神。 –
'select *,min(id)'不会选择每个组中具有最小id的行。它选择最小的id,但其他列来自组中的随机行,而不是具有最小值的同一行。有关如何获取正确的行,请参阅http://stackoverflow.com/questions/7745609/sql-select-only-rows-with-max-value-on-a-column?rq=1。 – Barmar