删除重复值,因为它是 false 或 true

remove duplicate values given it is false or true

所以如果我有 table:

col1  |  col2
 x    |   f
 x    |   t
 y    |   t 
 z    |   t 
 q    |   f
 q    |   t

对于所有重复值,我想保留假值。所以,

col1  |  col2
 x    |   f
 y    |   t 
 z    |   t 
 q    |   f

我如何在 Postgres 中执行此操作?提前致谢!

我会使用 WITH clause 检查 table 中的错误,然后针对该检查进行在线查询:

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 *

这是对您的 table 的大量假设,但根据您的示例,我认为这可行:

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'

一些警告:

  • 如果您有多个重复项,这将删除所有错误值,而不仅仅是第一个
  • 如果您有多个重复项,这将保留所有真值,而不仅仅是一个
  • 如果您想更有选择性地删除哪些错误值或保留哪些真实值,这可能是可行的,但这取决于您的内容