我在下面设计了查询我的删除操作。我是SQL新手,只是想与经验丰富的人在这里查看是否正常或更好的方法。我正在使用DB2数据库
DELETE FROM TableD
WHERE B_id IN
(
SELECT B.B_id
FROM TableB tB
INNER JOIN TableA tA
ON tB.A_id = tA.A_id
WHERE A_id = 123
) AND
C_id IN (1,2,3)
这有两个IN子句,我很担心,不确定我是否可以在任何地方使用EXISTS子句。
数据库结构如下:
表D数据有点类似于下面
B_id|C_id
----------
1 | 1
1 | 2
1 | 3
2 | 4
2 | 5
3 | 5
这里我必须删除在数组中包含C_id的行。但由于索引是B_id和D_id的组合,我通过等式运算符A_id = 123检索相关的B_id到表A的特定实体
答案 0 :(得分:1)
您的方法没有任何问题。但是,一个有用的替代技术是merge:
merge into TableD
using (
select distinct
B.B_id
from TableB tB
inner join TableA tA on
tB.A_id = tA.A_id and
A_id = 123
) AB
on
TableD.B_id = AB.B_id and
C_id in (1,2,3)
when matched then delete;
请注意,我必须在内部查询中使用distinct
来防止重复匹配。
答案 1 :(得分:1)
您也可以像这样使用合并:
merge into TableD
using TableB tB
on B.B_id = TableD.B_id
and tB.A_id in (select A_id from TableA tA where A_id = 123)
and C_id in (1,2,3)
when matched then delete;
答案 2 :(得分:0)
从TableD tD删除 哪里 存在( 选择 tB.B_id 从 表B tB 哪里 A_id = 123 AND tB.B_id = tD.B_id ) AND C_id IN(1,2,3)