2013-03-07 1 views
0

Кто-нибудь знает инструкцию, где он удаляет дубликаты, подобные этому из вывода?Результаты дублирования вывода в oracle sql

DEPARTMENT_ID DEPARTMENT_NAME    FULL_NAME    JOB_TITLE  
50   Shipping     Alana Walsh   Sales Representative 
50   Shipping     Alana Walsh   Sales Representative 
50   Shipping     Winston Taylor  Sales Manager 
50   Shipping     Winston Taylor  Sales Manager 
60    IT      Alexander Hunold  Sales Representative 
60    IT      Alexander Hunold  Sales Representative 

вот что я до сих пор:

select employees.department_id, departments.department_name, first_name || ' ' || last_name as full_name, job_title 
from departments, employees, jobs 
where employees.department_id = departments.department_id 
and job_title like '%Sales%' 
order by job_title, full_name; 

ответ

2

вы можете использовать SELECT DISTINCT для удаления дубликатов.

select distinct employees.department_id, departments.department_name, first_name || ' ' || last_name as full_name, job_title 
from departments, employees, jobs 
where employees.department_id = departments.department_id 
and job_title like '%Sales%' 
order by job_title, full_name; 

В качестве альтернативы вы можете также использовать GROUP BY на каждой колонке

select employees.department_id, departments.department_name, first_name || ' ' || last_name as full_name, job_title 
from departments, employees, jobs 
where employees.department_id = departments.department_id 
and job_title like '%Sales%' 
group by employees.department_id, departments.department_name, first_name || ' ' || last_name as full_name, job_title 
order by job_title, full_name; 

Это также выглядит как вы теряете объединение на работу? Это может быть причиной того, что ваш запрос возвращает повторяющиеся результаты.

Я также рекомендую использовать явный синтаксис соединения, когда вы можете.

FROM departments 
INNER JOIN employees ON employees.department_id = departments.department_id 
0

Вы можете использовать DISTINCT, как указывает Мэтт Буше.

Во многих случаях многие люди, однако, неправильно добавляют DISTINCT, чтобы скрыть тот факт, что они не имеют условия соединения. В вашем случае вы объединяете три таблицы вместе: departments, employees и jobs - но у вас есть только одно условие соединения. Таким образом, вы делаете декартовское соединение с таблицей jobs, которая почти наверняка не то, что вы хотите. Как таблица jobs относится к двум другим таблицам? Если мы предположим, что существует job_id в обоих jobs и employees стол, вы хотели бы что-то вроде

select employees.department_id, 
     departments.department_name, 
     first_name || ' ' || last_name as full_name, 
     job_title 
    from departments, employees, jobs 
where employees.department_id = departments.department_id 
    and jobs.job_id    = employees.job_id 
    and job_title   like '%Sales%' 
order by job_title, full_name; 
+0

@ user2145903 - Если предположить, что они оба имеют 'job_id', да, вы должны включать, что условие соединения. Вы не сказали нам, как выглядели ваши столы, поэтому я догадался об отношениях. –

+0

@ user2145903 - Имейте в виду, что у нас нет ваших таблиц или ваших данных. Если вы используете таблицы в схеме «HR», то запрос, который я опубликовал, должен работать. Часто, однако, ваш инструктор создаст для вас схему, в которой есть разные таблицы и разные данные. –

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