0

PostgreSQL で作業しているにもかかわらず、この select が Oracle で機能しないのはなぜですか (3 番目の合計は、次のように同じである必要があります: select sum(salary) from employees) ?:

select e1.employee_id, e1.department_id, e1.manager_id, e1.salary,
sum(e2.salary), sum(e3.salary)
from employees e1, employees e2, employees e3
where e1.department_id=e2.department_id
group by e1.employee_id, e1.department_id, e1.manager_id, e1.salary  
order by 1,2;

PostgreSQL では動作しますが、ここでは動作しません。Oracle では、制約なしで 1 つのコピー e2 のみが機能します (e1 が元のテーブルであり、その主キーによってグループ化されている場合)。

 select e1.employee_id, e1.department_id, e1.manager_id, e1.salary,
    sum(e2.salary)
    from employees e1, employees e2
    where e1.department_id=e2.department_id
    group by e1.employee_id, e1.department_id, e1.manager_id, e1.salary  
    order by 1,2;

または、最初のテーブルの各レコードの合計がどこになくても (ここでは制約なし):

 select e1.employee_id, e1.department_id, e1.manager_id, e1.salary,
    sum(e2.salary)
    from employees e1, employees e2
    group by e1.employee_id, e1.department_id, e1.manager_id, e1.salary  
    order by 1,2;

もちろん、次のような他の代替選択を知っています。

select employee_id, department_id, manager_id, salary, 
sum(salary) over (partition by department_id) as suma,
sum(salary) over ()
from employees order by 2,3;

またはサブセレクトを使用:

select employee_id, department_id, manager_id, salary, 
(select sum(e2.salary) from employees e2
where e2.department_id=e1.department_id) as suma1,
(select sum(e2.salary) from employees e2) as suma2
from employees e1 order by 1,2;

Oracle で複数のテーブルをコピーする方法を知っていますか?

4

1 に答える 1

1

最初のクエリでは、テーブル間で一致するように制約を設定していないため、完全なデカルト積を作成します

于 2013-04-12T08:24:17.163 に答える