仅当记录的副本存在时删除 columnX 中具有空值的行

Delete row with null value in columnX only when a copy of the record exists

我有以下 table:

并且我想删除 c3 为空的记录,但前提是 c1 和 c2 具有相同值的另一条记录已经存在。换句话说,只删除标有红色箭头的行。我怎样才能做到这一点?

我会把它写成 select,这样你就不会不小心复制粘贴和软管一些东西 - 你可以 运行 它并检查它 select 是行你想删除

SELECT *
FROM table t1
WHERE 
  t1.c3 IS NULL AND
  EXISTS(
    SELECT null FROM table t2
    WHERE t1.c1 = t2.c1 AND COALESCE(t1.c2, 'value that will never appear in the table') = COALESCE(t2.c2, 'value that will never in the table') AND t2.c3 IS NOT NULL
    )

转换为删除应该只是将 select * 替换为删除的情况,但如果不成功请发表评论..

编辑备注:

使用 coalesce 来演示如何确保 X 行的 c2 值为 null 等于行 Y 的另一个 c2 值为 null。重要的是您为 'value that will never appear in the table' 选择的字符串相同在 sql 中的两次出现中,并且它永远不会出现在 table 中,否则具有空值的行将与具有实际值的其他行匹配