我需要在单个查询中删除所有三个表中 UserIndex = 1 和 ItemNumber = 5202 的记录。我正在使用 SQL 2008 R2。
表 UserInfo1
用户索引 | 项目编号 | 物品数量 |
---|---|---|
1个 | 5202 | 99 |
1个 | 1600 | 50 |
2个 | 155 | 2个 |
3个 | 125 | 60 |
表 UserInfo2
用户索引 | 项目编号 | 物品数量 |
---|---|---|
8个 | 1265 | 50 |
4个 | 1899年 | 41 |
1个 | 5202 | 99 |
3个 | 125 | 60 |
表 UserInfo3
用户索引 | 项目编号 | 物品数量 |
---|---|---|
6个 | 5205 | 85 |
1个 | 6666 | 41 |
3个 | 4455 | 44 |
1个 | 5202 | 50 |
我正在尝试将此查询与两个表一起使用,但它不起作用:
DELETE ItemInfo1, ItemInfo2
FROM ItemInfo1
LEFT JOIN ItemInfo2
ON ItemInfo1.UserIndex = ItemInfo2.UserIndex
WHERE ItemInfo1.UserIndex = 1;
您通常不能在单个 T-SQL 语句中从多个表中删除
DELETE
。使用触发器或带选项的级联外键可以达到相同的效果
ON DELETE CASCADE
,但这可能不是您所需要的。如果您只想提交一批文本并确保所有三个删除操作作为一个单元成功或失败,请使用事务:
更一般地说,仅通过后缀数字来区分此类相似的表是一种糟糕的模式。这表明你真的应该有一个单独的表而不是一个额外的列来区分这三个集合。
一个单一的陈述
DELETE
将是微不足道的。