对于令人困惑的标题感到抱歉,我认为我的问题有点难以言喻。我有两个表,我们称之为“A”和“B”,它们各有很多列。为简单起见,假设它们只有列“1”和“2”。
现在,对于有趣的部分,我想编写一个SQL查询,对表A的第1列中的每个数值进行检查,以查看表A的第2列的值是否存在于表B的第2列中第1列的值。如果表B中的那些值不存在,则删除表A中的该行。
例如,每个表中第1行的值是其他地方使用的对象的ID。当我按照每个表中的特定ID进行过滤时,我看到表A中的行数比我想要的多,差异是第2列,这是一个相关的日期。当我过滤该ID时,我想删除与A中的日期相关的额外行,而不是B中的日期。
我不能像这里使用的那样使用NOT IN或NULL语句: Delete sql rows where IDs do not have a match from another table 或者在这里: Delete from table if the id doesn't exists in another table 因为每个表的每一列中的某些值确实存在于另一个表的某个位置,而不是相应的过滤器。
这是我第一次在SE上提问,我尽力解释,但如果我能提供任何其他信息,请告诉我!谢谢!
答案 0 :(得分:1)
据我所知,如果另一个表中没有相应的值,您希望从一个表中删除。强烈建议not exists
(无论数据库如何)。
我最好能解析你的描述:
delete from a
where not exists (select 1
from b
where b.col1 = a.col1 and b.col2 = a.col2
);