所以,如果我有一张桌子:
col1 | col2
x | f
x | t
y | t
z | t
q | f
q | t
对于所有重复值,我想保留false值。所以,
col1 | col2
x | f
y | t
z | t
q | f
我如何在Postgres中执行此操作?提前致谢!
答案 0 :(得分:1)
我是使用WITH clause检查表格中的谬误来做的,然后对该问题进行内联查询:
WITH false_vals AS
(SELECT col1, col2
FROM example_schema.table_with_dupes
WHERE col2='f')
DELETE
FROM example_schema.table_with_dupes
WHERE col2 = 't'
AND col1 IN
(SELECT col1
FROM false_vals)
要在执行此操作之前检查您要删除的内容,可以将DELETE
行替换为SELECT *
。
答案 1 :(得分:0)
这假设你的桌子很多,但根据你的例子,我认为这样可行:
delete from my_table t1
where
col2 and
exists (
select null
from my_table t2
where t1.col1 = t2.col1
group by t2.col1
having count (*) > 1
)
我假设您的t / f是布尔数据类型,而不是字符。如果这是一个错误的假设,您可以将not col2
更改为col2 = 't'
。
一些警告: