Эксклюзивные записи MySQL

#mysql

#mysql

Вопрос:

У меня есть много идентификаторов клиентов для многих идентификаторов страниц

Например.

ClientID 1 PageID 3
ClientID 1 PageID 2
ClientID 2 PageID 3
ClientID 3 PageID 3

В запросе я хочу вывести запись исключительно с идентификатором страницы 3.

Итак, в моем результате я должен получить клиента 2 и 3, а клиент 1 должен быть опущен из результатов… Каков наилучший способ сделать это?

Ответ №1:

Попробуйте этот —

 SELECT clientid FROM
  clients
GROUP BY
  clientid
HAVING
  COUNT(*) = COUNT(IF(PageID = 3, PageID, NULL));
  

Ответ №2:

Вы могли бы попробовать что-то вроде этого…

 SELECT DISTINCT ClientID
FROM table
WHERE PageID = 3
AND ClientID NOT IN ( SELECT DISTINCT ClientID FROM table WHERE PageID != 3 )
  

Или это …

 SELECT DISTINCT a.ClientID
FROM table a
JOIN ( SELECT ClientID, COUNT(*) AS total FROM table GROUP BY ClientID ) b ON a.ClientID = b.ClientID
WHERE b.total = 1
AND a.PageID = 3
  

Ответ №3:

Не работает, смотрите комментарий ниже!

 SELECT ClientID FROM table WHERE PageID=3 GROUP BY ClientID HAVING count(ClientID)=1
  

Это идея, попробуйте что-нибудь обойти.

Надеюсь, это поможет.

Комментарии:

1. Вы просто ограничиваете возможность дубликатов в пределах одного и того же PageID вместо того, чтобы удалять их, если они есть и на других страницах.