根据另一个表删除表中的所有行

mrb*_*lah 67 sql

我似乎永远不记得这个查询!

我想删除table1中的所有行,其ID与Table2中的相同.

所以:

DELETE table1 t1
 WHERE t1.ID = t2.ID
Run Code Online (Sandbox Code Playgroud)

我知道我可以做一个WHERE ID IN(SELECT ID FROM table2)但是如果可能的话我想用JOIN做这个查询.

HLG*_*GEM 77

DELETE t1 
FROM Table1 t1
JOIN Table2 t2 ON t1.ID = t2.ID;
Run Code Online (Sandbox Code Playgroud)

我总是在delete语句中使用别名,因为它可以防止意外

DELETE Table1 
Run Code Online (Sandbox Code Playgroud)

在运行之前未能突出显示整个查询时导致的.

  • 主要支持“始终使用别名”评论。好想法。 (7认同)

Ste*_*esa 74

DELETE Table1
FROM Table1
INNER JOIN Table2 ON Table1.ID = Table2.ID
Run Code Online (Sandbox Code Playgroud)


Căt*_*tiș 33

ANSI SQL中没有解决方案在删除AFAIK中使用连接.

DELETE FROM Table1
WHERE Table1.id IN (SELECT Table2.id FROM Table2)
Run Code Online (Sandbox Code Playgroud)

稍后编辑

其他解决方案(有时表现更快):

DELETE FROM Table1
WHERE EXISTS( SELECT 1 FROM Table2 Where Table1.id = Table2.id)
Run Code Online (Sandbox Code Playgroud)


Ves*_*nto 16

PostgreSQL的实现将是:

DELETE FROM t1
USING t2
WHERE t1.id = t2.id;
Run Code Online (Sandbox Code Playgroud)


Yan*_*ton 5

尝试这个:

DELETE Table1
FROM Table1 t1, Table2 t2
WHERE t1.ID = t2.ID;
Run Code Online (Sandbox Code Playgroud)

或者

DELETE Table1
FROM Table1 t1 INNER JOIN Table2 t2 ON t1.ID = t2.ID;
Run Code Online (Sandbox Code Playgroud)


bog*_*ron 5

我认为如果你尝试这样做,你可能会获得更多的性能

DELETE FROM Table1
WHERE EXISTS (
  SELECT 1
  FROM Table2
  WHERE Table1.ID = Table2.ID
)
Run Code Online (Sandbox Code Playgroud)