我有這個疑問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