Выберите, где нет, в другом выборе

Я пытаюсь

SELECT * 
FROM `bus_user_perms` 
WHERE `Perm_id` NOT IN (SELECT `Perm_id` 
                        FROM `bus_user_perms` 
                        GROUP BY `Perm_username`, `Perm_BusArId`)

но он ничего не возвращает, и я думаю, что это должно быть, потому что, когда я бегу:

SELECT `Perm_id` 
FROM `bus_user_perms` 
GROUP BY `Perm_username`, `Perm_BusArId`

Я получаю 870 результатов

и когда я бегу

SELECT `Perm_id` 
FROM `bus_user_perms`

Я получаю 931 результат.

По сути, я пытаюсь получить 61 результат, а не 870.

Я не совсем понимаю, что вы «пытаетесь». См .: Почему я должен предоставлять MCVE для того, что мне кажется очень простым запросом SQL?

Strawberry 01.06.2018 11:46
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
1
42
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

В наборе результатов должно быть только 870 различных perm_id, в котором содержится 931. Попробуйте добавить ключевое слово DISTINCT в.

Он ничего не вернет, потому что все ваши Perm_id из внешнего запроса будут иметь запись в подзапросе

Какова структура таблицы и что вы пытаетесь запросить?

Ответ принят как подходящий

Что вы пытаетесь сделать, так это найти дубликаты на основе имени пользователя и группировки busairid. Попробуйте выполнить следующий запрос, чтобы добиться того же.

SELECT `Perm_id` 
FROM `bus_user_perms` 
GROUP BY `Perm_username`, `Perm_BusArId`
having count(*) > 1 

Спасибо! так очевидно, что теперь я вижу ответ лицо ладонь

BACode 01.06.2018 12:01
SELECT `Perm_id` 
FROM `bus_user_perms` 
GROUP BY `Perm_username`, `Perm_BusArId`

Возвращает все Perm_id с уникальными Perm_username и Perm_BusArId.

SELECT `Perm_id` 
FROM `bus_user_perms`

Возвращает все содержащиеся в нем Perm_id.

Может случиться так, что в этой таблице разрешены дублированные Perm_id. Так работает:

SELECT * 
FROM `bus_user_perms` 
WHERE `Perm_id` NOT IN (SELECT `Perm_id` 
                        FROM `bus_user_perms` 
                        GROUP BY `Perm_username`, `Perm_BusArId`)

ничего не мог вернуть. Чтобы запустить дублированные данные:

SELECT `Perm_id` 
FROM `bus_user_perms` 
GROUP BY `Perm_username`, `Perm_BusArId`
HAVING count(*) > 1 

Другие вопросы по теме