删除多个表中的多行

时间:2018-08-31 20:22:00

标签: sql derby

我在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时花的时间太长了。

1 个答案:

答案 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'