我有两个表Table1和Table2。 Table1具有列ID,字符串ID和表2列ID,数据
我创建了一个基于table1删除行的触发器。如果逗号分隔的stringID超过一个,则它不起作用。如果stringIDs只是单个值,它就可以工作
create trigger tgTriggerName after delete
on Table1
begin
delete from Table2 where ID in (old.stringIDs);
end
戈登是正确的,这表结构真的可能不是你想要的。但是如果由于某种原因你必须这样做,这个查询可能会完成你想要的:
delete from Table2
where ID = old.stringIDs -- ID matches exactly
or old.stringIDs like ID + ',%' -- Or ID is at beginning of list
or old.stringIDs like '%,' + ID -- Or ID is at end of list
or old.stringIDs like '%,' + ID + ',%' -- Or ID is in middle of list
但那是一团糟。不要这样做。而是从Table1中删除stringIDs列,并向Table2添加一个名为Table1ID
的列,以指示此Table2记录所属的Table1 ID。所以Table2看起来像这样
ID Table1ID Data
1 1 some data
2 1 some data
3 2 some data
4 2 some data
5 2 some data
...
然后你的触发器查询可以简单地是:
delete from Table2
where Table1ID = old.ID
更干净的是完全跳过触发器并使用级联删除执行外键Contstraint。但我觉得这是另一天的教训。