2016-05-07 1 views
-1

Я застрял. У меня есть 2 таблицы - посмотрите на изображение №1 Table columns И мне хотелось бы построить запрос, который даст мне результат - он показан на изображении без 2. the result of query.Объединение значений столбцов из разных таблиц

У меня есть 2 вопроса, и я хотел бы их смешивать, чтобы получить список из изображения № 2. Пожалуйста, помогите мне, как построить запрос.

  • Запрос №1: SELECT department_name, department_id FROM DEPARTMENTS WHERE department_id между 90 И 110;
  • Запрос № 2: SELECT last_name, department_id от сотрудников WHERE department_id между 90 И 110;

ответ

1

Запрос:

with departments (department_id, department_name) as (
     select 90, 'Executive' from dual union all 
     select 100, 'Finance' from dual union all 
     select 110, 'Accounting' from dual 
    ), 
    employees (employee_id, last_name, department_id) as (
     select 1003, 'King'  , 90 from dual union all 
     select 1005, 'De Hann' , 90 from dual union all 
     select 1009, 'Gietz' , 110 from dual union all 
     select 1013, 'Popp'  , 100 from dual union all 
     select 1014, 'Chen'  , 100 from dual union all 
     select 1015, 'Higgins' , 110 from dual union all 
     select 1029, 'Greenberg', 100 from dual union all 
     select 1040, 'Kochar' , 90 from dual union all 
     select 1043, 'Faviet' , 100 from dual union all 
     select 1045, 'Urman' , 100 from dual union all 
     select 1049, 'Sciarra' , 100 from dual 
    ) 
    -- end input data; begin actual query -- 
select c_name, department_id from 
    (select department_name as c_name, department_id, 0 as categ from departments 
    union all 
    select ' ' || last_name as c_name, department_id, 1 from employees 
    order by department_id, categ, c_name 
); 

Результат:

C_NAME  DEPARTMENT_ID 
------------- ------------- 
Executive    90 
    De Hann    90 
    King     90 
    Kochar    90 
Finance     100 
    Chen    100 
    Faviet    100 
    Greenberg   100 
    Popp    100 
    Sciarra    100 
    Urman    100 
Accounting    110 
    Gietz    110 
    Higgins    110 

Вам не нужна деталь «с ...»; просто используйте запрос, который начинается в инструкции SELECT после двух факторизованных подзапросов (после «входных данных»). Я даже заказал по фамилии в каждом отделе для вас; если это не требуется, просто удалите «c_name» из предложения ORDER BY.

Я назвал первый столбец c_name; вы можете называть это так, как хотите, но называть его имя_дерева, когда оно также содержит фамилии сотрудников, не имело для меня большого смысла. Чтобы назвать это, вы хотите изменить инструкцию SELECT от SELECT c_name, department_id до SELECT c_name AS whatever, department_id...

+0

Отличный ответ. Я никогда не использовал UNION, возможно, потому, что я не знал об использовании. Спасибо за лучший ответ. –

+0

Спасибо, что вам нужна помощь. Этот ответ - это то, что я спросил. –

0
SELECT c.last_name, 
     d.department_id, 
     d.department_name 
FROM employee c 
JOIN deptartment d ON d.department_id=c.department_id 
WHERE d.department_id BETWEEN 90 AN 110 

ВЫХОДА из моей таблицы выборки

+-------+----+------------+ 
| KING | 10 | ACCOUNTING | 
| BLAKE | 30 | SALES  | 
| CLARK | 10 | ACCOUNTING | 
| JONES | 20 | RESEARCH | 
| SCOTT | 20 | RESEARCH | 
+-------+----+------------+ 
+0

Спасибо, есть ли возможность сделать список по-другому? DEPARTMENT_NAME ------ DEPARTMENT_ID ____________________________________________ И ниже Список LAST_NAME –

+0

Иными словами, как? –

+0

@PirateX - конечно, вы можете, вам просто нужно знать, как это сделать. Я отправлю решение в ближайшее время. – mathguy