我有两个表Table1和Table2。 Table1具有列ID,字符串ID和表2列ID,数据
我创建了一个基于table1删除行的触发器。 如果逗号分隔的字符串ID,它不起作用 不止一个。如果stringIDs只是单个值
,它就可以工作
<div class="row">
<div class="col-lg-2 col-sm-4 col-xs-6"></div>
<div class="col-lg-2 col-sm-4 col-xs-6"></div>
<div class="col-lg-2 col-sm-4 col-xs-6"></div>
<div class="col-lg-2 col-sm-4 col-xs-6"></div>
<div class="col-lg-2 col-sm-4 col-xs-6"></div>
<div class="col-lg-2 col-sm-4 col-xs-6"></div>
</div>
<div class="row">
<div class="col-lg-2 col-sm-4 col-xs-6"></div>
<div class="col-lg-2 col-sm-4 col-xs-6"></div>
<div class="col-lg-2 col-sm-4 col-xs-6"></div>
<div class="col-lg-2 col-sm-4 col-xs-6"></div>
<div class="col-lg-2 col-sm-4 col-xs-6"></div>
<div class="col-lg-2 col-sm-4 col-xs-6"></div>
</div>
答案 0 :(得分:2)
戈登是对的,这个表结构真的可能不是你想要的。但是如果由于某种原因你必须这样做,这个查询可能会达到你想要的效果:
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。但我觉得这是另一天的教训。
答案 1 :(得分:0)
'stringIDs'将它们保存在具有外键引用的另一个表中,而不是在新表上应用触发器以从表2中删除记录