Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从一个表中删除另一个表中存在的项?_Sql - Fatal编程技术网

Sql 如何从一个表中删除另一个表中存在的项?

Sql 如何从一个表中删除另一个表中存在的项?,sql,Sql,我有表A和表B。表B中的项目可能也存在于表A中,我想删除这些项目。执行此操作的SQL语句是什么样子的 delete a --select a.* from tablea a join tableb b on a.someid = b.someid 确保首先运行“选择部件”以确保获得所需的记录。类似于: DELETE FROM TableA as A WHERE A.ID IN (SELECT ID FROM TableB AS B

我有表A和表B。表B中的项目可能也存在于表A中,我想删除这些项目。执行此操作的SQL语句是什么样子的

delete a
--select a.*
from tablea a
join tableb b on a.someid = b.someid
确保首先运行“选择部件”以确保获得所需的记录。

类似于:

DELETE 
FROM TableA as A 
WHERE A.ID IN (SELECT ID 
               FROM TableB AS B 
               WHERE [your condition here])
这是一个选择

delete from a
where a.key in (select key from b)
要么:

DELETE a
WHERE a.some_field IN (SELECT some_field FROM b)


根据您的数据库,您可能会发现其中一个比另一个工作得更好。IIRC-Oracle倾向于选择WHERE-EXISTS而不是IN,但这取决于许多因素。

如果您的表使用InnoDB,最简单的方法是使用表B中的设置表a,并使用on-DELETE-CASCADE。这样就不需要修改代码,而且数据库的完整性也得到了保证。

在某些数据库中,从中删除看起来相当奇特的内容是非常有效的

DELETE FROM FIRST_TABLE FT
WHERE EXISTS(
            SELECT 1
            FROM SECOND_TABLE ST
            WHERE ST.PRIMARY_KEY = FT.PRIMARY_KEY
            );
delete from foo from foo as f
where exists 
(
  select 1 from bar as b  where b.field = f.field
) 

根据标准,这是允许的

delete a from a join b on a.id = b.id;

哪些数据库系统?它做什么?啊,我明白了。这相当于SQL Server上的语法更新。肯定在MSSQL 2K上工作过,我认为2K5-通过谷歌搜索“delete FROM”会产生一些有趣的结果+1。。。以前从未听说过DELETE,但我确实有过可以使用它的案例。现在我知道了!谢谢。这取决于您的数据库服务器平台。你在用什么?Mysql?SQL Server?+1谢谢,这一个解决了我今天遇到的类似问题。
delete a from a join b on a.id = b.id;