Let's say I have this data:
Table items
id | name | tag |
---|---|---|
1 | example | unique_tag |
2 | foo | simple |
42 | bar | simple |
3 | baz | hello |
51 | quux | world |
I'd like to get all those lines and know if a tag is used by other lines
SELECT id, name, tag, COUNT(*) OVER (PARTITION BY tag) > 1 AS flag FROM items
The result will be:
id | name | tag | flag |
---|---|---|---|
1 | example | unique_tag | false |
2 | foo | simple | true |
42 | bar | simple | true |
3 | baz | hello | false |
51 | quux | world | false |
In case your database doesn't have OVER and PARTITION you can use this to produce the same result:
SELECT id, name, tag, (SELECT COUNT(tag) FROM items B WHERE tag = A.tag) > 1 AS flag FROM items A