2010-11-08 5 views
41

Я делаю некоторые основные SQL на нескольких столах у меня есть, используя союз (справедливо или ошибочно)удалить дубликаты из 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 
+1

Вы хотите сказать, что ваш запрос не удаляет дубликаты? – Yada

ответ

110

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

+2

Это правда, по крайней мере для MS SQL. – TarasB

+2

Интересно ... не удаляет дубликаты в приведенном выше заявлении – thegunner

+2

@thegunner - У вас есть тип данных Timestamp как один из ваших столбцов? –

4

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

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 
1

Если вы используете 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 
0

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

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

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

    вы получите меньше файлов?

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

+1

По крайней мере, T-SQL удаляет все дубликаты, даже если они поступают из одного набора данных. – Carlos

Смежные вопросы