从复合键中选择删除记录

时间:2015-11-02 04:05:36

标签: sql postgresql sql-delete

我已经能够提出一个选择那些我想要删除的记录的查询,但现在我无法将其转换为删除查询。问题是复合键描述了所选行,因此正常delete from table where key in (select key...)不会起作用(至少不适用于Postgres)。

有什么方法可以让它发挥作用吗?

这是选择查询:

SELECT t1.*, link.*, t2.* FROM tbl as t1
JOIN link on link.a = t1.link_id
JOIN tbl as t2
ON link.b = t2.link_id
WHERE t1.data = t2.data and 
t1.some_id = q2.some_id

tbl可以通过some_idlink_id标识(在某些情况下我可能没有提及第三个标识符)。

1 个答案:

答案 0 :(得分:2)

啊......我想我回答了(应该考虑一下)。

DELETE FROM tbl as t1 
WHERE EXISTS (
  SELECT 1 FROM link
  JOIN tbl as t2
    ON link.b = t2.link_id
  WHERE 
      link.a = t1.link_id 
  AND t1.data = t2.data 
  AND t1.some_id = t2.some_id
)