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