Skip to content
Advertisement

Postgresql find by two columns

I have join table tags_videos

 tag_id | video_id
--------+----------
   1195 |    15033
   1198 |    15033
   1199 |    15033

   1196 |    15034
   1198 |    15034
   1199 |    15034

   1197 |    15035
   1198 |    15035
   1199 |    15035

   1195 |    15036
   1197 |    15036
   1198 |    15036

How can I select distinct video_id who have two specific tag_id

For example my tag_ids is 1195 and 1198, i should get video_ids 15033 and 15036 (who have 1195 and 1198 tag_id)

Advertisement

Answer

Extract the unique (tag_id, video_id) pairs for the two tags in t CTE and select these video_id‘s that have both tag_id‘s (i.e. 2 occurrences).

with t as 
(
 select distinct tag_id, video_id
 from tags_videos 
 where tag_id in ('1195', '1198')
)
select video_id from t
group by video_id having count(*) = 2;

DB-fiddle demo

User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement