【发布时间】:2015-10-08 05:24:32
【问题描述】:
我为我的删除操作设计了下面的查询。我是 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 子句。
数据库结构如下:
- 表 A 与表 B 具有一对多关系
- 表 B 与表 C 具有一对多关系
- 表 B 与表 D 具有一对多关系
- 表 D 具有复合主键 (B_id, C_id)
表 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 检索与表 A 的特定实体相关的 B_id
【问题讨论】:
-
“更好”是什么意思?对于给定的数据库设计和存储的数据更好?如果是,那么请添加有关它的信息。如果您的意思是格式,那么,是的,查询看起来不错... :)
-
哈哈:P 当然,我会添加更多细节。 2 分钟 :)
-
我添加了更多详细信息 Data_henrik
-
您似乎正在尝试围绕您的索引设计一个查询——这不是正确的方法。而是围绕查询设计索引。
-
真正的mustaccio,但它是一个生产数据库并且实施更改并不那么容易:(我必须使用我手头的东西,当事情不工作时,他们会回到我身边解决方案:D
标签: sql db2 sql-delete