通过 postgresql 插入 table 个唯一行
Insert into table unique rows by postgresql
我在 greenplum 中有一些代码统计信息 table A
| id | file | repo | lang | line |
-------------------------------------
| a | /a.txt | r1 | txt | 3 |
| a | /b.c | r1 | c | 5 |
| b | /x.java| r1 | java | 33 |
| c | /f.cpp | r2 | c++ | 23 |
| a | /a.txt | r3 | txt | 3 |
| a | /b.c | r3 | c | 5 |
但最后两行代码表明此代码来自 repo r1,因为提交 ID 与前两行相同。
我想删除重复的行,并将结果插入 table B:
| id | file | repo | lang | line |
-------------------------------------
| a | /a.txt | r1 | txt | 3 |
| a | /b.c | r1 | c | 5 |
| b | /x.java| r1 | java | 33 |
| c | /f.cpp | r2 | c++ | 23 |
行可以通过以下方式区分:id + file + repo
提前致谢。
您可以使用 NOT EXISTS 来检查是否存在重复项:
SELECT *
FROM t
WHERE NOT EXISTS (
SELECT 1
FROM t AS x
WHERE x.id = t.id
AND x.file = t.file
AND x.repo < t.repo
)
聚合似乎可以满足您的要求:
select id, file, min(repo) as repo, lang, line
from t
group by id, file, lang, line;
我在 greenplum 中有一些代码统计信息 table A
| id | file | repo | lang | line |
-------------------------------------
| a | /a.txt | r1 | txt | 3 |
| a | /b.c | r1 | c | 5 |
| b | /x.java| r1 | java | 33 |
| c | /f.cpp | r2 | c++ | 23 |
| a | /a.txt | r3 | txt | 3 |
| a | /b.c | r3 | c | 5 |
但最后两行代码表明此代码来自 repo r1,因为提交 ID 与前两行相同。 我想删除重复的行,并将结果插入 table B:
| id | file | repo | lang | line |
-------------------------------------
| a | /a.txt | r1 | txt | 3 |
| a | /b.c | r1 | c | 5 |
| b | /x.java| r1 | java | 33 |
| c | /f.cpp | r2 | c++ | 23 |
行可以通过以下方式区分:id + file + repo
提前致谢。
您可以使用 NOT EXISTS 来检查是否存在重复项:
SELECT *
FROM t
WHERE NOT EXISTS (
SELECT 1
FROM t AS x
WHERE x.id = t.id
AND x.file = t.file
AND x.repo < t.repo
)
聚合似乎可以满足您的要求:
select id, file, min(repo) as repo, lang, line
from t
group by id, file, lang, line;