2015-01-09 3 views
0
INSERT ALL 
INTO sal_history (empid,hiredate,sal) 
VALUES (empid,hiredate,sal) 
INTO mgr_history (empid,mgr,sal) 
VALUES (empid,mgr,sal) 
SELECT employee_id AS "EMPID", 
     hire_date AS "HIREDATE", 
     salary  AS "SAL", 
     manager_id AS "MGR" 
FROM employees 
WHERE employee_id > 200; 

Как вставка в пункте знать во всем этом заявлении, какие столбцы, чтобы выбрать для вставки в нескольких таблицах sal_history и mgr_history? Как я могу видеть, что есть 3 колонки в sal_history и 3 в mgr_history, но в подзапроса есть 4.Многостоловые безусловные извлечения строк из путаницы суб-запроса

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

+2

Поскольку в предложениях VALUES указывается, какой из 4 столбцов использовать. –

+0

Я знал это, вот и все ?, никаких других «трюков»? – udarH3

+1

Какие еще трюки вам понадобятся? Это очень ясно! –

ответ

3

Каждые из INTO положений определяет, какие столбцы для заполнения этой таблицы, а соответствие VALUES пункта определяет, какой из столбцов из подзапроса использовать. В этом случае подзапрос использует те же имена, что может быть немного запутанным; возможно, вы нашли бы понятнее с различными псевдонимами:

INSERT ALL 
INTO sal_history (empid,hiredate,sal) 
VALUES (sub_empid,sub_hiredate,sub_sal) 
INTO mgr_history (empid,mgr,sal) 
VALUES (sub_empid,sub_mgr,sub_sal) 
SELECT employee_id AS "SUB_EMPID", 
     hire_date AS "SUB_HIREDATE", 
     salary  AS "SUB_SAL", 
     manager_id AS "SUB_MGR" 
FROM employees 
WHERE employee_id > 200; 

Все четыре из подзапросов колонок (псевдонимы) используются в VALUES пунктах; по три в каждом, с обоими SUB_EMPID и SUB_SAL (с моим надежным уточняющим префиксом), появляющимся в обоих.

+0

Отличное объяснение, большое спасибо. – udarH3

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