Получить только пользователей, которых у меня нет в другой таблице - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу получить пользователей (из таблицы пользователей), которые еще не входят ни в одну группу (таблица group_user) и имеют тип etudiant (users.type = "etudiant")

Я пытался сделать это в своем функция, но она дает мне повторных пользователей из обеих таблиц

        $Othersetudiants=DB::Table('users')
        ->join('group_user', 'users.id', '!=', 'group_user.user_id')
        ->select('users.*')
        ->where([['users.type','=','etudiant'],
        ['users.id', '!=', 'group_user.user_id']
        ])
        ->get();

Вот мои данные и таблицы, все внешние ключи установлены в миграциях ..

Группа:

enter image description here

group_user:

enter image description here

пользователь:

enter image description here

1 Ответ

0 голосов
/ 16 апреля 2020

Построен запрос:

select users.*
from users
[inner] join group_user on 
   users.id != group_user.user_id
where
   users.type = 'etudiant'
   and users.id != group_user.user_id

Проблема здесь в предложении соединения , вы сопоставляете одну строку таблицы user со всеми строками в таблице group_user , за исключением строки, которая защищает предложение users.id = group_user.user_id.

Если вам нужны только пользователи, которых нет в таблице group_user, вы можете использовать LEFT ПРИСОЕДИНЯЙТЕСЬ, а затем «отфильтруйте» пользователей, не соответствующих левому соединению:

select users.*
from users
left join group_user on 
   users.id = group_user.user_id
where
   users.type = 'etudiant'
   and group_user.user_id is null

Более подробное объяснение см. В чем разница между INNER JOIN, LEFT JOIN, RIGHT JOIN и FULL JOIN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...