我有一张这样的表:
+-----+------------+
| id | name |
|-----|------------|
| 1 | ali |
|-----|------------|
| 2 | |
|-----|------------|
| 3 | |
|-----|------------|
| 4 | peter |
|-----|------------|
| 5 | |
+-----+------------+
我想把上排的值放在底行。 (如果底行为空)。有点像这样:
+-----+------------+
| id | name |
|-----|------------|
| 1 | ali |
|-----|------------|
| 2 | ali |
|-----|------------|
| 3 | ali |
|-----|------------|
| 4 | peter |
|-----|------------|
| 5 | peter |
+-----+------------+
有可能吗?
答案 0 :(得分:1)
当然,你可以使用这样的东西:
update t
set name=case
when name is null then (select name
from (select * from t) it
where it.id<t.id and it.name is not null
order by id desc
limit 1)
else name
end
你可以在行动Mac OS X中看到它,但它的工作方式应该非常明显。唯一有趣的是内部select
,这是为了解决MySql的荒谬限制,它不允许您从正在更新的表中进行选择。
答案 1 :(得分:1)
e.g:
UPDATE my_table a
JOIN
( SELECT x.*
, MAX(y.name) new_name
FROM my_table x
JOIN my_table y
ON y.id <= x.id
GROUP
BY x.id
) b
ON b.id = a.id SET a.name = b.new_name;
或
UPDATE my_table a
JOIN
( SELECT x.*
, CASE WHEN name IS NULL THEN @name ELSE @name:=name END new_name
FROM my_table x
, (SELECT @name:=NULL) vars
ORDER
BY id
) b
ON b.id = a.id
SET a.name = b.new_name;
答案 2 :(得分:1)
这个怎么样?
var trueFalse: Bool {
return arc4random_uniform(2) == 1
}
print(trueFalse) // false
print(trueFalse) // true
print(trueFalse) // false
if trueFalse {
// do that 50% odds
}
这似乎是使用MySQL最简单的方法。