我在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语句。即。我要删除SUPERGROUP S1中的SUBGROUP {1,2,3,4,7,10}吗?
今天,我一次要在所有表中删除一行,但是在删除1000个SUBGROUP时花的时间太长了。
答案 0 :(得分:1)
我认为您正在寻找的解决方案是:
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'