Поиск упущенных значений в общей таблице БД

103
26 апреля 2021, 09:50

Всем доброго времени суток. Попалась интересная задачка. Есть таблица Role с колонками ClientID и RoleName. Как можно найти в ней записи ClientID для которых остутствует RoleName ='User'. Знаю что общее число DISTINCT ClientID 897, а WHERE RoleName = 'User' 888.  

Answer 1
SELECT ClientID
FROM Role
WHERE NOT RoleName = 'User'
Answer 2

Проблема была, что клиенты не были уникальными Написал такую кверю и нашел  все ClientID

SELECT DISTINCT ClientID FROM Role
WHERE ClientID NOT IN (SELECT ClientID FROM Role 
                        WHERE RoleName = 'User' AND clientID IS NOT NULL);
Answer 3

distinct во вложенном запросе сократит затраты памяти базы и времени выполнения.

когда тестировал 100 лет назад , оптимальный вариант был

SELECT DISTINCT ClientID  from tab t1 
LEFT JOIN tab t2 ON t2.ClientID=t1.ClientID AND t2.RoleName='user'
WHERE t2.id IS NULL
READ ALSO
Nginx и своя страница ошибки

Nginx и своя страница ошибки

Есть сервер с ISPmanager Lite 5208

95
Преобразование массива в строку

Преобразование массива в строку

Не могу додуматься, мой контроллер:

111
Как узнать если дата уже прошла?

Как узнать если дата уже прошла?

дата 1 - нынешняя дата дата 2 - созданая дата

108
Вычисление в базе или в приложении?

Вычисление в базе или в приложении?

Возник вопрос, возможно, глупый, но все жеЕсть приложение на php и бд с субд Postgresql с расширением postgis

95