Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新触发器SQLite中的单个行_Sqlite_Triggers_Sql Update - Fatal编程技术网

更新触发器SQLite中的单个行

更新触发器SQLite中的单个行,sqlite,triggers,sql-update,Sqlite,Triggers,Sql Update,表rental具有值(ID、odo_out、日期), 表车辆具有值(ID、odo、car), 两者都有更多的列,但与此无关 我已尝试创建触发器: CREATE TRIGGER odo_update AFTER INSERT ON rental BEGIN UPDATE rental SET odo_out = (SELECT Vehicle.odo FROM Vehicle WHERE rental.ID = Vehicle.ID) WHERE EXISTS (SELECT * FROM Veh

表rental具有值(ID、odo_out、日期), 表车辆具有值(ID、odo、car), 两者都有更多的列,但与此无关

我已尝试创建触发器:

CREATE TRIGGER odo_update AFTER INSERT ON rental
BEGIN
UPDATE rental SET odo_out = (SELECT Vehicle.odo FROM Vehicle WHERE rental.ID = Vehicle.ID)
WHERE EXISTS (SELECT * FROM Vehicle WHERE Vehicle.ID = rental.ID);
END;

它应该检测到rental.odo_out的空值,并用Vehicle.odo中对应ID的值替换它。这确实有效,但它会更新表中的每一行,而我希望它只用空值更新行,即插入新行。一个ID可以在租赁表中重复多次。如何执行此操作?

您必须设置条件,以便仅更新新行。
这里需要关键字
NEW
来引用新行的列:

CREATE TRIGGER odo_update AFTER INSERT ON rental
WHEN NEW.odo_out IS NULL
BEGIN
  UPDATE rental 
  SET odo_out = (SELECT odo FROM Vehicle WHERE ID = NEW.ID)
  WHERE ID = NEW.ID;
END;