仅返回特定列中具有唯一值的行(Postgres)

时间:2014-04-30 08:07:23

标签: sql postgresql

说我有以下查询:

SELECT id, connected_tracks FROM track_nodes;

返回以下行:

1 "1100 1100 1200"
2 "1100 1100 1300"
3 "1100 1100 1300"
4 "1100 1200 1400"

如何修改查询,以便只返回不重复的行?

使用上面的例子,我只希望返回这些行:

1 "1100 1100 1200"
4 "1100 1200 1400"

重要的是,我不想要任何重复的行。

我正在使用Postgres 9.3。

每当我寻找方法时,我会发现许多使用“DISTINCT”的引用。但据我所知,这不会给出我想要的答案 - 我认为它也会给我一行“connected_track”值重复。

任何人都可以给我一个关于如何做到这一点的指针吗?

非常感谢!

2 个答案:

答案 0 :(得分:0)

如果您想要删除任何行,其中connected_tracks每个表出现多次,您需要进行自我反连接:

   SELECT t.id, t.connected_tracks
     FROM track_nodes AS t
LEFT JOIN track_nodes AS j
       ON t.connected_tracks = j.connected_tracks
      AND t.id <> j.id
    WHERE j.id IS NULL

答案 1 :(得分:0)

select min(id),
       connected_tracks
from track_nodes
group by connected_tracks
having count(*) = 1;

SQLFiddle:http://sqlfiddle.com/#!15/3227e/1

可能比自我加入更快