2013-11-24 2 views
1

q1:Присоединяйтесь к подзапросу

SELECT SUBSTR(o.first_name,1,1)||' '||o.last_name "NAME", 
    FROM employees o 
    WHERE o.salary > 
    (SELECT AVG(i.salary) 
    FROM employees i 
    WHERE i.department_id = 
    o.department_id) 

У меня есть таблица отдела с DEPARTMENT_ID и department_name || как присоединиться к этому результату для отображения результатов подзапроса и имени?

q2) Это вызывает ошибку, добавив последнюю строку: зачем?

SELECT SUBSTR(first_name, 1, 1) || ' ' || last_name "Employee Name", department_id "Department Id", to_char(NULL) "Department Name", to_char(NULL) " City" 
FROM employees 
UNION 
SELECT to_char(NULL) "Employee Name" , department_id "Department ID", department_name "Department Name", to_char(NULL)" City" 
FROM departments 
UNION 
SELECT to_char(NULL) "Employee Name" , to_char(NULL) "Department Id", to_char(NULL) "Department Name" ,to_char(NULL)"City" 
FROM locations 
+0

Для ошибки, пожалуйста, добавьте ошибку вы получаете. Что касается вашего запроса, если вы добавите структуру таблицы и некоторые данные примера, возможно, мы сможем помочь вам достичь этого лучше. Что касается –

+0

@Filipe: error: ORA-01790: выражение должно иметь тот же тип данных, что и соответствующее выражение .. таблица, к которой я хотел бы присоединиться, в q2 имеет department_id, имя_файла .. – user3026370

+0

первый, у меня нет понятия, как подойти для получения трех столбцов: имя и зарплата (из подзапроса) и имя от другой таблицы – user3026370

ответ

1

Для вашей первой попытки запроса:

SELECT SUBSTR(o.first_name, 1, 1) || ' ' || o.last_name "NAME", 
    d.department_name "DEP NAME" 
FROM employees o 
INNER JOIN department d ON d.department_id = o.department_id 
WHERE o.salary > (
    SELECT AVG(i.salary) 
    FROM employees i 
    WHERE i.department_id = o.department_id 
    ) 

Ваша ошибка приходит, скорее всего, от того, to_char(null) для department_id, когда этот столбец не является CHAR.

Просто используйте null вместо:

SELECT SUBSTR(first_name, 1, 1) || ' ' || last_name "Employee Name", 
    department_id "Department Id", 
    to_char(NULL) "Department Name", 
    to_char(NULL) " City" 
FROM employees  
UNION  
SELECT to_char(NULL) "Employee Name", 
    department_id "Department ID", 
    department_name "Department Name", 
    to_char(NULL) " City" 
FROM departments  
UNION  
SELECT to_char(NULL) "Employee Name", 
    NULL "Department Id",  -- Replace to_char(null) with NULL 
    to_char(NULL) "Department Name", 
    city_name "City" -- Add city_name column to get results different than NULL 
FROM locations 
+0

Почему «TO_CHAR» нужен вообще? –

+0

Несмотря на то, что ошибка исчезла, существует логическая ошибка, так как, как и в прошлом, должны отображаться названия городов, а в списке нет .-- UPDATE: исправлено to_char (NULL) «Город» в город ». – user3026370

+0

@ PM77-1. Я не уверен, в чем причина его использования. Я просто указал, что, скорее всего, дал ему эту ошибку. –

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