我正在研究MYSQL数据库,我遇到了一个问题。我有一个列有日期的专栏。但是,我只是在整个日期列已经填充了数据时才尝试将整列设置为null。
我尝试过:
update users set date = null where date is not null
但是,当我这样做时,它会重置当前日期。仅当整个数据列填充数据时,如何将日期设置为空?
例如,我有一个随机名称选择器程序,用于选择随机用户。
我的表格如下:
ID名称日期
1 A
2 B
3 C
今天选择随机用户时:
ID名称日期
1 A
2 B
3 C 2016-03-12
我的代码在这种情况下运行正常。我想保留C的日期,然后明天随机选择一个人。如果我明天运行我的代码,它只会在A和B之间进行选择,并会在其名称旁边放置一个日期。例如,假设它选择了B,那么我的表格将如下所示:
ID名称日期
1 A
2 B 2016-03-13
3 C 2016-03-12
星期一,我的节目别无选择,只能选择A人,我的桌子看起来像是:
ID名称日期 2016年6月1日 2 B 2016-03-13 3 C 2016-03-12
到目前为止,我的程序运行正常。我想要的是星期二(03/15/2016)当我去运行我的随机选择器时我希望它将B和C的日期重置为Null并将A与2016-03-14保持一致以便A不会#39; t周二被选中。
答案 0 :(得分:0)
我更喜欢两个步骤,但如果你必须有一个......这可能会有用。
这样做是评估记录的总记录数,当日期不为空时,它们匹配时将每条记录更新为空日期。如果它们不匹配,则将日期字段设置为等于现有日期字段。
也许这......(未经测试)
Update users u set u.`date` = NULL
where u.ID exists
(Select 1
from users iu
where (Select count(*) from users) = (Select count(*) from users where `date` is not null)
and u.id = iu.id)
每次触及每条记录......我更喜欢两个步骤,因为它只在需要时触及记录。
两个步骤:
select count(*) cnt from users where date is null;
update users set date = null
; 答案 1 :(得分:0)
此查询应在所有行上将日期设置为null,但具有当前日期的行除外,并且仅当所有日期行都已设置时:
UPDATE users u
JOIN (
SELECT count(id) nulls
FROM users
WHERE date IS NULL
) cnt
SET u.date = NULL
WHERE u.date != DATE(NOW())
AND cnt.nulls = 0;