Подтвердить что ты не робот

Удалять дубликаты из sql union

Я делаю базовый sql на нескольких таблицах, которые у меня есть, используя объединение (правильно или неправильно)

но мне нужно удалить дубликаты. Любые идеи?

select * from calls
left join users a on calls.assigned_to= a.user_id
where a.dept = 4 
union
select * from calls
left join users r on calls.requestor_id= r.user_id
where r.dept = 4
4b9b3361

Ответ 1

Union удалит дубликаты. Union All не работает.

Ответ 3

Другие уже ответили на ваш прямой вопрос, но, возможно, вы могли бы упростить запрос, чтобы устранить вопрос (или я что-то пропустил, и такой запрос, как следующий, действительно приведет к существенно другим результатам?):

select * 
    from calls c join users u
        on c.assigned_to = u.user_id 
        or c.requestor_id = u.user_id
    where u.dept = 4

Ответ 4

Если вы используете T-SQL, то из предыдущих сообщений появляется, что UNION удаляет дубликаты. Но если вы этого не сделаете, вы можете использовать разные. Мне это тоже не совсем нравится, но это может привести к тому, что вы ищете

SELECT DISTINCT *
FROM
(
select * from calls
left join users a on calls.assigned_to= a.user_id
where a.dept = 4 
union
select * from calls
left join users r on calls.requestor_id= r.user_id
where r.dept = 4
)a

Ответ 5

Поскольку вы все еще получаете дубликат, используя только UNION, я бы проверял, что:

  • То, что они являются точными дубликатами. Я имею в виду, если вы сделаете

    SELECT DISTINCT * FROM (<your query>) AS subquery

    у вас меньше файлов?

  • То, что у вас уже нет дубликатов в первой части запроса (возможно, сгенерировано левым соединением). Как я понимаю, UNION он не добавит к ним строки результатов, которые уже находятся на нем, но не удалит дубликаты, уже присутствующие в первом наборе данных.

Ответ 6

Если вы используете T-SQL, вы можете использовать временную таблицу в хранимой процедуре и соответственно обновлять или вставлять записи вашего запроса.