Sqlite 请参阅另一个表';触发器中的s列?
鉴于: 以下是:Sqlite 请参阅另一个表';触发器中的s列?,sqlite,Sqlite,鉴于: 以下是: CREATE TABLE worktags ( worktag_id integer not null primary key, worktag character(32) not null default '' unique, ... last_updated character(32) not null default '[Error]' );
CREATE TABLE worktags (
worktag_id integer not null primary key,
worktag character(32) not null default '' unique,
...
last_updated character(32) not null default '[Error]'
);
CREATE TABLE truefacts (
about character(32) not null primary key,
fact character(32) not null
);
给出了错误:
错误:第52行附近:没有这样的列:truefacts.fact
但该列是存在的,并且似乎表明
[[schema name.]table name.]列名
是一个合法的
expr
,用于SET column name=expr
的右侧。您需要使用子查询来访问其他(truefacts)表(因为任何地方都没有来自truefacts的),例如:-
也就是说,不需要触发器,因为子查询可以嵌入到更新中
例如,考虑下面的例子:-< /P>
CREATE TRIGGER zz_worktags_last_updated AFTER UPDATE ON worktags BEGIN
UPDATE worktags SET
last_updated = (SELECT fact FROM truefacts WHERE about = 'Last Worktag Update');
END;
这:-
谢谢,非常有帮助。我有一个大的表,它会被数据定期刷新,这意味着一个程序将用许多“UPSERT”命令编写一个文件。我希望使用触发器可以缩短这些命令,因为它们已经非常长了。
CREATE TRIGGER zz_worktags_last_updated AFTER UPDATE ON worktags BEGIN
UPDATE worktags SET
last_updated = (SELECT fact FROM truefacts WHERE about = 'Last Worktag Update');
END;
DROP TRIGGER IF EXISTS zz_worktags_last_updated;
DROP TABLE IF EXISTS worktags;
DROP TABLE IF EXISTS truefacts;
CREATE TABLE worktags (
worktag_id integer not null primary key,
worktag character(32) not null default '' unique,
last_updated character(32) not null default '[Error]'
);
CREATE TABLE truefacts (
about character(32) not null primary key,
fact character(32) not null
);
INSERT INTO truefacts VALUES('Last Worktag Update','xxx');
INSERT INTO worktags (worktag,last_updated) VALUES('mytag',(datetime('now')));
SELECT * FROM worktags;
UPDATE worktags SET last_updated = (SELECT fact FROM truefacts WHERE about = 'Last Worktag Update'), worktag = 'aaaa' WHERE worktag_id = 1;
SELECT * FROM worktags;
UPDATE truefacts SET fact = 'zzzz' WHERE rowid = 1;
CREATE TRIGGER zz_worktags_last_updated AFTER UPDATE ON worktags BEGIN
UPDATE worktags SET
last_updated = (SELECT truefacts.fact FROM truefacts WHERE truefacts.about = 'Last Worktag Update');
END;
UPDATE worktags SET worktag = 'bbbb' WHERE worktag_id = 1;
SELECT * FROM worktags;