我在DERBY数据库中有类似下面的表集,其中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行和PAIR表和PERSON表中SUBGROUP和SUBGROUP的SUPERGROUP中的所有条目(如果在不同的超级组中存在相同的子组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语句。即。我想在SUPERGROUP S1中删除SUBGROUPs {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'