更新SQLite触发器中的多行

更新SQLite触发器中的多行,sqlite,triggers,Sqlite,Triggers,是否可以在SQLite触发器中更新多行?我的触发器见下文 CREATE TRIGGER "saved_tiles_reference" BEFORE DELETE ON favourites FOR EACH ROW BEGIN UPDATE saved_tiles SET reference_count = reference_count - 1 WHERE id = (select tile from favourite_tiles where favourite = OLD.id

是否可以在SQLite触发器中更新多行?我的触发器见下文

CREATE TRIGGER "saved_tiles_reference"
 BEFORE DELETE ON favourites
FOR EACH ROW
BEGIN
    UPDATE saved_tiles SET reference_count = reference_count - 1 WHERE id = (select tile from favourite_tiles where favourite = OLD.id);
    DELETE FROM favourite_tiles WHERE id = OLD.id;
END;
如您所见,我希望将已保存的_tiles上的引用计数减少1。我要更新的已保存的_tile是使用where子句中的select语句定义的

此触发器工作,但仅适用于它遇到的第一个条目

编辑

保存的\u tiles
属于其父级
收藏夹
,它们由表
收藏夹
连接。这是我的数据库结构

-- ----------------------------
--  Table structure for favourite_tiles
-- ----------------------------
DROP TABLE IF EXISTS "favourite_tiles";
CREATE TABLE "favourite_tiles" (
     "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
     "favourite" integer NOT NULL,
     "tile" integer NOT NULL
     CONSTRAINT "fk_favourite" FOREIGN KEY ("favourite") REFERENCES "favourites" ("id"),
     CONSTRAINT "fk_tiles" FOREIGN KEY ("tile") REFERENCES "saved_tiles" ("id")
);
INSERT INTO "main".sqlite_sequence (name, seq) VALUES ("favourite_tiles", '2');

-- ----------------------------
--  Table structure for favourites
-- ----------------------------
DROP TABLE IF EXISTS "favourites";
CREATE TABLE "favourites" (
     "id" integer NOT NULL,
    PRIMARY KEY("id")
);

-- ----------------------------
--  Table structure for saved_tiles
-- ----------------------------
DROP TABLE IF EXISTS "saved_tiles";
CREATE TABLE "saved_tiles" (
     "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
     "reference_count" integer NOT NULL DEFAULT 0
);
INSERT INTO "main".sqlite_sequence (name, seq) VALUES ("saved_tiles", '1');

-- ----------------------------
--  Triggers structure for table favourite_tiles
-- ----------------------------
CREATE TRIGGER "increment_tile_reference"
 BEFORE INSERT ON favourite_tiles
FOR EACH ROW
BEGIN
-- Type the SQL Here.
    UPDATE saved_tiles SET reference_count = reference_count + 1 WHERE id = NEW.tile;
END;

-- ----------------------------
--  Triggers structure for table favourites
-- ----------------------------
CREATE TRIGGER "saved_tiles_reference"
 BEFORE DELETE ON favourites
FOR EACH ROW
BEGIN
-- Type the SQL Here.
    UPDATE saved_tiles SET reference_count = reference_count - 1 WHERE id = (select tile from favourite_tiles where favourite = OLD.id);
    DELETE FROM favourite_tiles WHERE id = OLD.id;
END;

不幸的是我解决了

我没有使用
id=(选择…
),而是在(选择…中使用
id,如下所示,在修改后的触发器中使用

CREATE TRIGGER "saved_tiles_reference"
 BEFORE DELETE ON favourites
FOR EACH ROW
BEGIN
    UPDATE saved_tiles SET reference_count = reference_count - 1 WHERE id IN (select tile from favourite_tiles where favourite = OLD.id);
    DELETE FROM favourite_tiles WHERE favourite = OLD.id;
END;

表之间的关系是什么?将数据库结构添加到问题中这并不能回答我的问题。哪些列是外键?很抱歉,出于某种原因删除了外键。现在将它们添加到编辑中。保存的
平铺
收藏平铺
表中的
收藏
相关联。