ВЫБРАТЬ из таблицы, где идентификатор не представлен с другим user_id - PullRequest
0 голосов
/ 22 марта 2020
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

Я пытаюсь выбрать строки, где id_imported_urls присутствует только у текущего пользователя, но я не могу понять, как правильно сделать вызов SQL.

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

1 Ответ

0 голосов
/ 22 марта 2020

С 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 
)

Это вернет строку, только если id_imported_urls = 23965 не существует ни для какого user_id <> 4. Этот запрос:

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

возвращает все id_imported_urls, принадлежащие только одному пользователю, поэтому вы можете использовать его следующим образом:

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
)

, чтобы получить все строки, содержащие эти id_imported_urls.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...