删除重复值,因为它是 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'
。
一些警告:
- 如果您有多个重复项,这将删除所有错误值,而不仅仅是第一个
- 如果您有多个重复项,这将保留所有真值,而不仅仅是一个
- 如果您想更有选择性地删除哪些错误值或保留哪些真实值,这可能是可行的,但这取决于您的内容
所以如果我有 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'
。
一些警告:
- 如果您有多个重复项,这将删除所有错误值,而不仅仅是第一个
- 如果您有多个重复项,这将保留所有真值,而不仅仅是一个
- 如果您想更有选择性地删除哪些错误值或保留哪些真实值,这可能是可行的,但这取决于您的内容