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

amj*_*324 16 sql sqlite

我有表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 |
+------+------+

我想删除表B中出现的表A中的所有行(与ID1和ID2完全匹配).理论上似乎很简单,但我对EXISTS声明或其他方法并不满意.我正在使用SQLite.

任何建议都非常感谢.

Duk*_*ing 26

怎么样:(不太确定这是否适用于SQLite)

DELETE FROM TableA
WHERE EXISTS (SELECT *
              FROM TableB
              WHERE TableB.ID1 = TableA.ID1
                AND TableB.ID2 = TableA.ID2)
Run Code Online (Sandbox Code Playgroud)

  • 我发现SQL的这种语法非常棘手.如果TableA和TableB是同一个表,那么我必须使用'TableA'来引用delete子句中的表,而我无法给它一个别名; 相反,我必须在子查询中为表提供别名,并且无法使用没有前缀表名的'id1'和'id2'... (8认同)