#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 вместо того, чтобы удалять их, если они есть и на других страницах.