sqlite 从第二个表中存在匹配的表中删除行

yxyvkwin  于 2023-03-03  发布在  SQLite
关注(0)|答案(4)|浏览(176)

我有表A,其中包含以下值:

+------+------+
| ID1  | ID2  |
+------+------+
| 1689 | 1709 |
| 1709 | 1689 |
| 1782 | 1709 |
| 1911 | 1247 |
| 1247 | 1468 |
| 1641 | 1468 |
| 1316 | 1304 |
| 1501 | 1934 |
| 1934 | 1501 |
| 1025 | 1101 |
+------+------+

以及具有以下值的另一关系(表B):

+------+------+
| ID1  | ID2  |
+------+------+
| 1641 | 1468 |
| 1911 | 1247 |
+------+------+

我想删除表A中出现在表B中的所有行(ID1和ID2完全匹配)。理论上看起来很简单,但我对EXISTS语句或其他方法不感兴趣。我使用的是SQLite。
任何建议都非常感谢。

zour9fqk

zour9fqk1#

怎么样:(不太确定这是否在SQLite中工作)

DELETE FROM TableA
WHERE EXISTS (SELECT *
              FROM TableB
              WHERE TableB.ID1 = TableA.ID1
                AND TableB.ID2 = TableA.ID2)
toe95027

toe950272#

在MSSQL中,您可以执行以下操作:(效率最高)
从a.ID1 = b.ID1和a.ID2 = b.ID2上的联接B中删除a

wz3gfoph

wz3gfoph3#

DELETE a FROM TableA a INNER JOIN TableB b ON a.ID1=b.ID1 AND a.ID2=b.ID2
mgdq6dx1

mgdq6dx14#

如果您希望NULL匹配。这是一个不寻常的需求,但如果您需要它,标准的SQL选择将无法满足。

DELETE FROM TableA
WHERE EXISTS (SELECT *
  FROM TableB
    WHERE 
      (TableB.ID1 IS NULL AND TableA.ID1 IS NULL OR TableB.ID1 = TableA.ID1)
    AND 
      (TableB.ID2 IS NULL AND TableA.ID2 IS NULL OR TableB.ID2 = TableA.ID2)
)

相关问题