2015-07-13 3 views
0

Я попросил использовать не ANSI присоединиться к данному запросу: Q) Отображение записей из указанных таблиц с полями - EmployeeID, имя сотрудника, отдела идентификатор, название отдела, датой_начала из работа, дата окончания работы, должность, название страны, название региона, разница в максимальных заработных платах и ​​заработная плата работникнесколько не ANSI присоединиться

Таблицы даны нам стандартна в «час» соединение таблиц в Oracle 11g

я использовал следующий запрос:

select e.Employee_id, 
     first_name, 
      e.deparment_id, 
     department_name, 
      start_date, 
      end_date, 
      job_title, 
     country_name, 
      region_name, 
      (select max(salary) from employees)-salary 
from employees e, 
    countries c, 
     departments d, 
     job_history jh, 
     jobs j, 
     locations l, 
     regions r 
where e.deparment_id = d.department_id 
and jh.employee_id = e.employee_id 
and e.job_id = j.job_id 
and d.location_id = l.location_id 
and l.country_id = c.country_id 
and c.region_id = r.region_id; 

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

мой выход

101 Neena 90 Executive  28-10-93 15-03-97 President      Unites States of America Americas 7000 
101 Neena 90 Executive  21-09-89 27-10-93 President      Unites States of America Americas 7000 
102 Lex  90 Executive  13-01-93 24-07-98 Administration Vice President Unites States of America Americas 7000 
200 Jennifer 10 Administration 01-07-94 31-12-98 Administration Assistant  Unites States of America Americas 19600 
200 Jennifer 10 Administration 17-09-87 17-06-93 Administration Assistant  Unites States of America Americas 19600 
176 Jonathon 80 Sales   01-01-99 31-12-99 Sales Representative   United Kingdom   Americas 15400 
176 Jonathon 80 Sales   24-03-98 31-12-98 Sales Representative   United Kingdom   Americas 15400 
201 Michael 20 Marketing  17-02-96 19-12-99 Marketing Manager    Canada     Americas 11000 

требуемый выход там, где не будет никаких избыточных данных, как мы можем видеть «Neena» или «Джонатон» повторяющаяся.

+0

Вы не получаете желаемый результат? если нет, то покажите нам желаемый результат и то, что вы сейчас получаете? – Rahul

+2

Что некомпетентно хотел бы, чтобы вы использовали соединения implilcit? – HLGEM

+0

Вы должны показать нам, что вы подразумеваете под избытком в определенных записях. Likley - это просто, что таблицы находятся в отношениях друг к другу. – HLGEM

ответ

1

Итак, у вас есть крест: ваши условия соединения не идентифицируют уникальные ключи для каждой таблицы, поэтому одна или несколько таблиц с несколькими записями вызывают повторение «уникальных» атрибутов.

Без исходных данных это трудно, но я бы предположил, что это таблица JOB_HISTORY: значения START_DATE и END_DATE уникальны в каждой строке. Самый простой способ, чтобы исправить это было бы дополнительным присоединиться на JOB_ID:

and e.job_id = jh.job_id 

Добавление это условие должно привести к JOB_HISTORY строки возвращают только последнюю роль для работника.

+0

, конечно же, сделал !! только не тот, который вы предложили ... 'e.hire_date = jh.start_date' сделал трюк: D –

0

Вместо этого вы можете использовать USING, а не несколько WHERE. Вы должны уточнить свой вопрос.

+1

Спасибо! Однако это вопрос, который я получил в текстовом формате ... Я вставил его ... Я попытаюсь использовать 'USING' –

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