Skip to content
Advertisement

How to `insert into` with select using `group by` and having a unique constraint key in Oracle?

I am trying to insert into a table, 5 values from other 2 tables, but when I try to insert them, Oracle sends me a message that I am violating the unique key restriction, what I do not understand why I have this problem if I am using the distinct clause in the select.

Thanks

My query:

  insert into grados_salariales (Department_id,
  Department_name,Sumatoria,Sal_minimo,Sal_maximo)
  Select distinct departments.department_id,
  departments.department_name,
  sum(employees.salary),min(employees.salary),
  max(employees.salary)
  from employees,departments
  group by salary,department_name,
  departments.department_id;

This is the table that already exist and the unique key statement

create table
grados_salariales(
  Department_id number,
  Department_name varchar(50),
  Sumatoria number,
  Sal_minimo number,
  Sal_maximo number);




  Alter table grados_salariales
  add constraint  Department_id_pk
  primary key ( Department_id);

I would expect inserting the department_id without problems.

Advertisement

Answer

This is your query:

select distinct d.department_id, d.department_name,
       sum(e.salary), min(e.salary),
       max(e.salary)
from employees e join
     departments d
     on e.department_id = d.department_id
group by e.salary, d.epartment_name, d.department_id;

The problem is the salary in the group by. If you want one row per department, then you can do:

select d.department_id, d.department_name,
       sum(e.salary), min(e.salary),
       max(e.salary)
from employees e join
     departments d
     on e.department_id = d.department_id
group by d.department_name, d.department_id;

Notes:

  • Never use commas in the FROM clause.
  • Always use proper, explicit, standard JOIN syntax.
  • Use table aliases so your queries are easier to write and read.
  • SELECT DISTINCT is almost never appropriate with GROUP BY.
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement