我有一个返回
的子查询 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_id
和two_id
的table_x记录?
如果子查询只返回one_id
,我可以使用类似
DELETE FROM table_x WHERE `one_id` IN (SELECT ...
是否有与给定子查询结果类似的解决方案?
答案 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()
可能还需要转换和/或别名。