删除多个表中的多个行

问题描述 投票:0回答:1

我在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时耗时太长。

sql derby
1个回答
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'
© www.soinside.com 2019 - 2024. All rights reserved.