sql - 跨多个表删除多行
问题描述
我在 DERBY db 中有如下一组表,其中 PAIR 行表示 PERSON 表中的多行,SUBGROUP 表示 PAIR 表中的多行,而 SUPERGROUP 表示 SUBGROUP 表中的多行。
<table>
<name>SUPERGROUP</name>
<column>
<name>SUPERGROUPID</name>
</column>
</table>
<table>
<name>SUBGROUP</name>
<column>
<name>SUBGROUPID</name>
</column>
<column>
<name> SUPERGROUPID </name>
</column>
</table>
<table>
<name>PAIR</name>
<column>
<name>PERSONID1</name>
</column>
<column>
<name>PERSONID2</name>
</column>
<column>
<name> SUPERGROUPID </name>
</column>
<column>
<name> SUBGROUPID </name>
</column>
</table>
<table>
<name>PERSON</name>
<column>
<name>PERSONID</name>
</column>
<column>
<name> SUPERGROUPID </name>
</column>
<column>
<name> SUBGROUPID </name>
</column>
</table>
我希望能够删除一个 SUBGROUP 行以及该 SUBGROUP 和 SUBGROUP 的 SUPERGROUP 中的 PAIR 表和 PERSON 表中的所有条目(如果不同的超组中存在相同的子组 ID,则不希望删除行)。
我已经尝试执行之前帖子中描述的内部联接,如下所示,但 SQuirrel SQL 在 SUBGROUP 之后的命令上给出了 SQLState:42X01 ErrorCode:30000 语法错误。
DELETE FROM
SUBGROUP,
PAIR,
PERSON USING SUBGROUP
INNER JOIN PAIR
INNER JOIN PERSON
WHERE
SUBGROUP.SUBGROUPID = '1'
AND SUBGROUP.SUBGROUPID = PAIR.SUBGROUPID
AND SUBGROUP.SUBGROUPID = PERSON.SUBGROUPDID
AND SUBGROUP.SUPERGROUPID = 'S1'
AND SUBGROUP.SUPERGROUPID = PAIR.SUPERGROUPID
AND SUBGROUP.SUPERGROUPID = PERSON.SUPERGROUPID
以上是正确的吗?有更好的方法吗?
此外,如果我有多个要删除的 SUBGROUP,有没有办法创建单个 SQL 语句。IE。我想删除 SUPERGROUP S1 中的子组 {1,2,3,4,7,10}?
今天,我在所有表中一次删除一行,但是在删除 1000 个 SUBGROUP 时,这花费的时间太长了。
解决方案
我认为您正在寻找的解决方案是:
DELETE
SUBGROUP T1,
PAIR T2,
PERSON T3
FROM T1
INNER JOIN T2 ON (T1.SUBGROUPID = T2.SUBGROUPID AND T1.SUPERGROUPID = T2.SUPERGROUPID)
INNER JOIN T3 ON (T1.SUBGROUPID = T3.SUBGROUPDID AND T1.SUPERGROUPID = T3.SUPERGROUPID)
WHERE
T1.SUBGROUPID = '1'
AND T1.SUPERGROUPID = 'S1'
推荐阅读
- node.js - 使用 mangoDB 运行 node.js 时出现错误
- php - 仅在商店中用 woocommerce 中的贝宝结帐替换添加到购物车按钮
- jekyll - 将 bigimg 添加到 beautiful-jekyll
- javascript - 如何删除 [vue/no-use-v-if-with-v-for] 警告?
- javascript - 如何减少json数据
- ios - 导出的 tflite 模型预测不正确的输出
- javascript - Javascript 如何避免无限回调调用?
- datagrid - Ext.JS 6:如何在网格单元格中设置值
- c++ - 当主窗口保持在顶部时,子窗口被遮挡 - MacOS
- spring-boot - 在 Spring Boot Junit 中推入 @EmbeddedKafka 后从主题中获取数据