1

我想更新一个 MySQL 表。使用更新功能。

我的专栏是:

time_started, time_in_1, time_in_2, time_in_3.

我想要的是 where time_startedis not null 然后移动到下一列,但如果time_in_1也不为 null 移动到下一列,依此类推。有人可以帮忙吗?

4

2 回答 2

0

首先让我说这似乎是一个非常奇怪(而且不是很可扩展)的表结构。所需的 SQL 并不是很漂亮,我会说将它扩展到几列之外不会让任何人高兴:)

也就是说,这应该做你想做的;

SET @value := '2001-01-01';

UPDATE myTable SET
  time_in_3 =    IF(time_started IS NOT NULL AND
                    time_in_1    IS NOT NULL AND
                    time_in_2    IS NOT NULL AND
                    time_in_3    IS NULL, @value, time_in_3),
  time_in_2    = IF(time_started IS NOT NULL AND
                    time_in_1    IS NOT NULL AND
                    time_in_2    IS NULL, @value, time_in_2),
  time_in_1    = IF(time_started IS NOT NULL AND
                    time_in_1    IS NULL, @value, time_in_1),
  time_started = IF(time_started IS NULL, @value, time_started)
WHERE id=1;

一个展示它的 SQLfiddle

于 2013-02-07T19:38:00.137 回答
0
UPDATE table 
  SET time_started = IFNULL(time_started, newValue, time_started), 
       time_1 = IFNULL(time_1, newValue, time_1),
       time_2 = IFNULL(time_2, newValue, time_2);

这会将每列设置为 newValue if NULL,否则保留其原始值。

于 2013-02-07T18:59:58.153 回答