Дублирование, вызванное JOIN - PullRequest
2 голосов
/ 10 августа 2011

Я создал простой запрос, который содержит JOIN, и этот JOIN «делает» некоторые дубликаты.

Пользователи таблицы:

UserID  Name
------  ----
1       Luis
2       Andre
3       Mark
4       Linda

Таблица bind_groups:

groupID UserID
------- ------
26      1
87      2
87      1
12      4
41      4
6       1
21      2
5       3

SQL-запрос:

SELECT users.UserID FROM users
    LEFT JOIN bind_groups ON users.UserID = bind_groups.UserID
    WHERE groupID = 26 OR groupID = 87

Результат будет:

UserID
------
1
2
1

Как видите, он возвращает UserID = 1 дважды (потому что он появляется дважды, в groupID 26 и groupID 87).

Что мне делать, если я хочу вернуть его один раз, а не количество раз, которое он появляется в группах?

Спасибо.

Ответы [ 5 ]

3 голосов
/ 10 августа 2011
select distinct users.UserID from users ...

Нет необходимости в том, чтобы оно также было левым, ваше предложение where делает его внутренним объединением

2 голосов
/ 10 августа 2011

DISTINCT ясно, но в зависимости от размеров таблицы может быть полезно работать с IN:

SELECT DISTINCT users.UserID FROM users
    JOIN bind_groups ON users.UserID = bind_groups.UserID
    WHERE groupID IN(26, 87)
2 голосов
/ 10 августа 2011

использовать group by clause

SELECT users.UserID FROM users
    LEFT JOIN bind_groups ON users.UserID = bind_groups.UserID
    WHERE groupID = 26 OR groupID = 87
GROUP BY UserID
2 голосов
/ 10 августа 2011

Попробуйте изменить свой sql:

SELECT DISTINCT users.UserID FROM users
    LEFT JOIN bind_groups ON users.UserID = bind_groups.UserID
    WHERE groupID = 26 OR groupID = 87
2 голосов
/ 10 августа 2011

Использовать DISTINCT:

SELECT DISTINCT users.UserID FROM users
    LEFT JOIN bind_groups ON users.UserID = bind_groups.UserID
    WHERE groupID = 26 OR groupID = 87
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...