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

#mysql

#mysql

Вопрос:

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

Например.

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

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

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

Ответ:

 SELECT clientID, clientName, pageID, profileTypeID, pageName
FROM  client
GROUP BY
  clientID
HAVING
  COUNT(*) = COUNT(IF(profileTypeID != 1, profileTypeID, NULL))
  

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

1. Извините, я не понимаю ваш пример: ( Почему вы исключаете clientid 1 и включаете clientdid 3?

2. Я предполагаю, что следует вернуть ClientID = 2, потому что нет другой строки, связанной с PageID = 2. Однако, почему должен быть возвращен ClientID = 3, когда ClientID = 1 также связан с PageID = 3?

Ответ №1:

Я читаю это так, что вам нужна любая строка, в которой данный ClientID не связан со страницей, отличной от 2 или 3.

 Select ...
From MyTable As T
Where T.PageID In(2,3)
    And Not Exists  (
                    Select 1
                    From MyTable As T2
                    Where T2.ClientID = T.ClientId
                        And T2.PageID Not In(2,3)
                    )