我昨晚问了这个问题,并获得了有关合并的信息(在postgresql中不可用)。我愿意尝试建议的解决方法,但我只是想了解为什么不能使用条件逻辑来完成。
我已经澄清了这个问题,所以也许这将更容易理解。
我有一个查询,将数据插入表中。但这每次都在创造新的记录。有没有一种方法可以检查行是否首先存在,然后是否存在UPDATE,以及是否不存在INSERT?
UPDATE
INSERT
$user = 'username'; $timestamp = date('Y-m-d G:i:s.u'); $check_time = "start"; //can also be stop $check_type = "start_user"; //can also be stop_user $insert_query = "INSERT INTO production_order_process_log ( production_order_id, production_order_process_id, $check_time, $check_type) VALUES ( '$production_order_id', '$production_order_process_id', '$timestamp', '$user')";
这个想法是该表将记录签入和签出值(production_order_process_log.start和production_order_process_log.stop)。因此,在进行带有签出时间戳记的记录之前,查询应检查是否$production_order_process_id已经存在。如果它确实存在,那么时间戳可以进入stop并$check_type能stop_user。否则,他们可以留下来start和start_user。
production_order_process_log.start
production_order_process_log.stop
$production_order_process_id
stop
$check_type
stop_user
start
start_user
我基本上是想避免这种结果。
+----+---------------------+--------------------------------+--------------------+-------------------+-------------+-------------+ | id | production_order_id | production_order_process_id | start | stop | start_user | stop_user | +----+---------------------+--------------------------------+--------------------+-------------------+-------------+-------------+ | 8 | 2343 | 1000 | 12 july 03:23:23 | NULL | tlh | NULL | +----+---------------------+--------------------------------+--------------------+-------------------+-------------+-------------+ | 9 | 2343 | 1000 | NULL | 12 july 03:45:00 | NULL | tlh | +----+---------------------+--------------------------------+--------------------+-------------------+-------------+-------------+
非常感谢您帮助我避免使用postgresql逻辑来完成此任务。
您将对这个问题和答案感兴趣:插入,在PostgreSQL中重复更新吗?
基本上,要么使用两个查询(如果发现更新,则执行选择,否则执行插入),这不是最佳解决方案(两个脚本同时运行可能会产生重复的插入),或者按照上述问题建议进行操作- 创建存储过程/函数来做到这一点(这可能是最好的选择,也是最简单的)。