Как выбрать пользователей, имеющих только определенный тег, а не другой тег - PullRequest
0 голосов
/ 16 октября 2018

У меня есть следующая схема БД sql schema

Мне нужно получить имя пользователя, имя пользователя которого имеет имя тега «A», а также имя тега «B». НапримерПользователь X имеет оба тега A, тег B, он не должен быть включен в результат, тогда как, если другой пользователь Y имеет только тег 'A', он должен быть включен в результат.Возможно ли это без подзапроса? Нужно ли менять схему?

1 Ответ

0 голосов
/ 16 октября 2018
  • Вы можете GROUP BY для идентификатора и имени пользователя.
  • Использовать предложение HAVING с агрегацией SUM() для фильтрации случаев.
  • Если у пользователя неттег 'B', SUM(name = 'B') будет равен нулю, пост присоединяется.

Попробуйте следующее:

SELECT 
  u.user_id, 
  u.fname, 
  u.lname 
FROM 
  user AS u 
JOIN tags AS t ON t.user_id = u.user_id 
JOIN tags_def AS td ON td.tag_id = t.tag_id 
GROUP BY 
  u.user_id, 
  u.fname, 
  u.lname 
HAVING 
  SUM(td.name = 'A') AND
  SUM(td.name = 'B') = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...