SQL DELETE FROM表记录匹配子查询

时间:2018-03-17 18:03:59

标签: postgresql subquery sql-delete

我有一个返回

的子查询
 one_id   | two_id
--------------------
 1654838  | 1526634
 1657136  | 1526634
 1659179  | 1526634
 1659527  | 1526634
 2040608  | 1510944
 2040608  | 1516727

我有一个像

这样的table_x
 one_id   | two_id  | other_column
-----------------------------------
 1654838  | 1526634 | ...
 ...      | ...     | ...

如何删除子查询结果中列出one_idtwo_id的table_x记录?

如果子查询只返回one_id,我可以使用类似

的内容
DELETE FROM table_x WHERE `one_id` IN (SELECT ...

是否有与给定子查询结果类似的解决方案?

2 个答案:

答案 0 :(得分:1)

<强>更新

是的,以下答案不正确。我有机会测试它。但这应该有效:

DELETE FROM
    mytable2 AS t1
WHERE EXISTS (
    SELECT
        one_id, two_id
    FROM
        mytable1 t2
    WHERE
        t1.one_id=t2.one_id AND
        t1.two_id=t2.two_id
)

更新2:添加一个额外的WHERE AND子句,它将为您提供所需的one_id和two_id值。例如:

    WHERE
        (t2.someothercol > 0 AND t2.someothercol < 10) AND
        t1.one_id=t2.one_id AND
        t1.two_id=t2.two_id

原始回答

也许这样的事情(虽然我无法测试):

WITH my_subquery AS (
    SELECT one_id, two_id
    FROM some_table
)
DELETE FROM table_X AS t1
WHERE t1.one_id=my_subquery.one_id AND t1.two_id=my_subquery.two_id

对PostgreSQL文档的引用:https://www.postgresql.org/docs/9.1/static/queries-with.html

答案 1 :(得分:0)

我不知道对性能有什么影响,但您可以尝试以下操作:

name.get()

可能还需要转换和/或别名。