Home > Blockchain >  Select only duplicate values from the table
Select only duplicate values from the table

Time:10-30

I need to select from a table (user_id, i_id) only those values that match both user_ids. Table structure enter image description here

I tried to do it with SELECT DISTINCT, but it selects all the data

SELECT DISTINCT interest_relations.user_id,  interest_relations.i_id
FROM interest_relations
WHERE interest_relations.user_id IN (713870562,22131245) GROUP BY user_id, i_id

I expect to get only those values that are the same for both users

CodePudding user response:

An alternative with inner join

select a.user_id user_a, b.user_id user_b, i_id 
from interest_relations a join interest_relations b using (i_id)
where a.user_id < b.user_id;
user_a user_b i_id
22131245 713870562 41
22131245 715870562 42
22131245 713870562 43
22131245 715870562 44
22131245 713870562 46
22131245 713870562 47

CodePudding user response:

Select all user_id which have a count greater than 1:

SELECT *
FROM interest_relations
WHERE user_id IN (SELECT user_id
                  FROM interest_relations
                  GROUP BY user_id
                  HAVING count(*)>1)

see: DBFIDDLE

EDIT: After reading the answer from @stevanof-sm, I think I have mis-read the question. A simple query like next one may be all you need:

SELECT i_id, max(user_id) as "max", min(user_id) as "min"
FROM interest_relations
WHERE user_id in (22131245,715870562)
GROUP BY i_id;

output:

i_id max min
42 715870562 22131245
41 22131245 22131245
46 22131245 22131245
47 22131245 22131245
43 22131245 22131245
45 22131245 22131245
44 715870562 22131245
  • Related