Skip to content
Advertisement

SELECT from table where id is not represented with another user_id

id id_imported_urls user_id
25041   23965   4
25040   23964   4
25039   23963   4
25037   23961   4
25034   23958   4
25033   23957   21
25032   23956   21
25031   23955   21
25030   23954   21
25029   23953   21

I’m trying to select rows, where the id_imported_urls is only present on the current user, but i cant figure out how to make the SQL call properly.

SELECT * 
  FROM links 
 WHERE id_imported_urls = 23965 
   AND user_id = 4
HAVING COUNT(SELECT * FROM links WHERE id_imported_urls = 23965) < 2

Advertisement

Answer

With NOT EXISTS:

SELECT l.* FROM links l
WHERE l.id_imported_urls = 23965 AND l.user_id = 4
AND NOT EXISTS (
  SELECT 1 FROM links
  WHERE user_id <> l.user_id AND id_imported_urls = l.id_imported_urls 
)

This will return a row only if id_imported_urls = 23965 does not exist for any user_id <> 4 .
This query:

select id_imported_urls
from links
group by id_imported_urls
having count(distinct user_id) = 1

returns all the id_imported_urls that belong to only 1 user, so you can use it like this:

select * from links
where id_imported_urls in (
  select id_imported_urls
  from links
  group by id_imported_urls
  having count(distinct user_id) = 1
)

to get all the rows that contain these id_imported_urls.

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