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

时间:2013-02-10 02:22:12

标签: 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 |
+------+------+

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

任何建议都非常感谢。

4 个答案:

答案 0 :(得分:24)

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

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

答案 1 :(得分:0)

在MSSQL中,您可以这样做:(效率最高)

删除a  从一个  JOIN b ON a.ID1 = b.ID1         AND a.ID2 = b.ID2

答案 2 :(得分:0)

在MS-SQL中使用 EXISTS 删除可以这样实现:

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

我只是假设这也将在sqlite中起作用

答案 3 :(得分:-1)

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