我正在尝试找到一种方法来使用orientdb运行更新查询,其中我更新了多个属性。我将在边缘上有两个属性,一个名为acknowred_at,另一个名为read_at。在read_at更新之前,acknowred_at字段可以更新。但是,我想确保当我更新所有read_at字段时,我还要确保任何confirmged_at字段也会使用当前时间戳更新(如果之前未设置)。
我的用例是让facebook像通知一样。用户可以确认通知但当时不能读取。但是如果他们点击read_all按钮,或者稍后决定“读取”该通知,那么我想确保我也更新了acknowred_at属性(如果它是null)。
有没有办法在acknowred_at字段上进行case语句类型更新,只更新为null?
更新:为了使其更清楚,我总是想更新read_at字段,但只想更新confirmged_at字段(如果它为null)。如果先前已确认,我希望保留该值。
UPDATE EDGE received SET read_at = '#{DateTime.now}', acknowledged_at = '#{DateTime.now}' WHERE out.employeeId = '#{employeeId}'
答案 0 :(得分:0)
试试这个(或变体)
UPDATE... SET read_at = IF(read_at > 0, read_at, '#{DateTime.now}')
答案 1 :(得分:0)
UPDATE EDGE收到SET ... WHERE acknowred_at IS NULL
<强> UDPATE 强>
这对我有用
update edge received set read_at = "2017-06-23 19:29:00",acknowledged_at=ifnull(acknowledged_at, "2017-06-23 19:29:00") WHERE out.employeeId = 'A002'