【发布时间】:2018-02-21 11:24:48
【问题描述】:
想象一下我有一张桌子(冰箱),里面有列:(日期(pk)、水果、蔬菜、淀粉、糖果)。这是一个示例行:
date | fruits | veggies | starches | sweets
20180220 | melon | potato | pasta | fudge
我只想用以下内容插入或替换冰箱中的某些列:
> INSERT or REPLACE into refrigerator (date, fruits, veggies, starches) VALUES ("20180220", "apple", "carrot", "bread")
当我这样做时,如果我没有为 (sweets) 指定一个值,它会被 NULL 覆盖。
date | fruits | veggies | starches | sweets
20180220 | apple | carrot | bread | NULL
不替换我指定的值的正确方法是什么?
我确信这是显而易见的事情。请随意嘲笑我。
【问题讨论】:
-
使用
UPDATE? SQL 查询通常非常快,因此您可以在决定使用INSERT或UPDATE之前检查该事物是否存在。 -
您是否建议使用 INSERT 或 UPDATE 而不是 INSERT 或 REPLACE?如果(日期)是唯一的,我基本上想要一个添加新行的衬线,但如果(日期)不是唯一的,则只替换某些值,而不会将(糖果)列中的有效值归零。
-
@bebocure 您将无法获得该功能,因此只需检查主键是否已经在表中,然后执行插入。 COALESCE 函数将帮助您在 UPDATE 期间保留现有的列值。但是,没有什么神奇的语句可以结合所有这些功能。
-
@PittsburghDBA THIS 是我想听到的。我想我期待魔法。感谢您为回答所做的所有努力。我会看看我是否可以将它放入我正在使用的 Python 脚本中并从那里继续。
-
我用下面的 UNION ALL 解决方案纠正了自己。我想这毕竟不是那么神奇。只是REPLACE一个人做不到,COALESCE也做不到。