sql - 如何删除一个表中所有在另一个表中有相应记录的记录

标签 sql mysql sql-server

我有两个表 A 和 B。我想删除表 A 中在以下查询中返回的所有记录:

SELECT A.*
FROM A , B
WHERE A.id = B.a_id AND
    b.date < '2008-10-10'

我试过:

DELETE A 
WHERE id in (
    SELECT a_id 
    FROM B 
    WHERE date < '2008-10-10')

但这仅在内部选择实际返回一个值时有效(如果结果集为空则无效)

注意:这必须适用于SQLServer 和 MySQL

编辑:更多信息

上述删除在 SQLServer 上 100% 有效

在 MySQL 上运行它时,我收到一条“错误的 SQL 语法”消息,指出 SELECT 的开头是问题所在。如果我用 (1,2) 替换内部选择,那么它就可以工作。

@Kibbee 你是对的,内部选择是否返回行实际上没有区别。

@Fred 我收到“not unique table.alias: a”消息

最佳答案

我认为这应该可行(无论如何都适用于 MySQL):

DELETE a.* FROM A a JOIN B b ON b.id = a.id WHERE b.date < '2008-10-10';

没有别名:

DELETE A.* FROM A JOIN B ON B.id = A.id WHERE B.date < '2008-10-10';

关于sql - 如何删除一个表中所有在另一个表中有相应记录的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/272045/

相关文章:

c# - 是否有任何好的 .Net 库用于构建任意 sql 命令?不是关系数据

sql - VS2017 中的 U-SQL 项目 - 缺少项目子类型。子类型 : '{416D63FD-0477-49AA-A954-A7C5B95A9B51} is unsupported by this installation

php - 捕获并处理 MySQL 和 PHP 中的超时错误

php - Laravel 4 查询

MYSQL 查询转换为 SQL SERVER

php - SQL Server随机超时问题

mysql - 选择给定日期间隔内的日期

sql - 如何将复杂的 SQL 转换为 HQL 或 JPQL 查询

mysql - "TableB.Date"中的未知列 'having clause'

c# - SQL Server 对象资源管理器不显示数据库