Abed Al Rahman Hussien Balhawan Ответов: 1

Sql-запрос для решения зарплата сотрудника, имеющего дело с клиентом, имеющим id=4, была удвоена


create table employee
	(emp_id 	integer	 	not null,
	 manager_id 	integer		not null,	
	 emp_name 	char(20)	not null,
	 emp_tel 	char(10),
  	 emp_salary	number		not null,
	 hire_date	date,
	constraint pk_employee primary key(emp_id)
	);


create table customer
	(cust_id	integer 	not null,
	cust_name 	char(20)	not null ,
	cust_address 	varchar2(200)	,
	emp_id 		integer	 	not null,
    	constraint pk_customer primary key(cust_id)
	);


alter table customer 
add constraint fk_employee_customer foreign key(emp_id) 
references employee(emp_id);


alter table employee 
add constraint fk_employee_manager foreign key(manager_id) 
references employee(emp_id);


The salary of employee dealing with customer having id=4 has been doubled


Что я уже пробовал:

update employee
set emp_salary=emp_salary*2
from employee e
join customer c
on c.emp_id=e.emp_id
where e.emp_id =(4)


Я попробовал с join, но это не сработало, никаких идей, как решить этот запрос

ZurdoDev

Этот sql выглядит правильно. Что значит-не работает?

Хотя синтаксически это выглядит правильно, я сомневаюсь, что вы действительно хотите это сделать. Почему зарплата сотрудников имеет какое-то отношение к столу клиента?

Abed Al Rahman Hussien Balhawan

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

ZurdoDev

У вас есть соединение.

1 Ответов

Рейтинг:
2

phil.o

Попробуй

update tab employee
set employee.emp_salary = employee.emp_salary * 2
where exists (select 1 from tab customer
where customer.emp_id = employee.emp_id
and customer.cust_id = 4)
или
update tab employee
set employee.emp_salary = employee.emp_salary * 2
from tab employee, tab customer
where customer.emp_id = employee.emp_id
and customer.cust_id = 4
или
update (select emp_salary
from employee e 
inner join customer c on c.emp_id = e.emp_id 
where c.cust_id = 4) t
set t.emp_salary = t.emp_salary * 2
Обновление Oracle с помощью Join[^]


Abed Al Rahman Hussien Balhawan

появляется сообщение об ошибке: ORA-00971: отсутствует ключевое слово SET

phil.o

Почему вы тогда пометили MySQL? Oracle-это не MySQL, и в их синтаксисе есть существенные различия.

Abed Al Rahman Hussien Balhawan

да, я допустил ошибку, пометив mysql.

phil.o

Я обновил свой ответ с помощью версии oracle.

Abed Al Rahman Hussien Balhawan

ORA-00904: "EMP_SALARY": недопустимый идентификатор

2-й способ

ORA-00933: SQL-команда не завершена должным образом

ZurdoDev

Как бы то ни было, Ваш запрос все равно будет делать то же самое, что и ОП, не так ли? Я не вижу, как это может помочь.

phil.o

Нет, не будет. Тест на идентификатор клиента, а не идентификатор сотрудника был исправлен, и синтаксис также был изменен, чтобы соответствовать MySQL.

ZurdoDev

О, предложении where. Я вижу.

Abed Al Rahman Hussien Balhawan

ORA-00904: "EMP_SALARY": недопустимый идентификатор

2-й способ

ORA-00933: SQL-команда не завершена должным образом

phil.o

Я обновился с третьим вариантом, плюс ссылка на полезный блог.

Abed Al Rahman Hussien Balhawan

ORA-01779: невозможно изменить столбец, который сопоставляется с таблицей без сохранения ключа

спасибо за помощь, я буду проверять ссылку, которую вы отправили.

phil.o

Боюсь, я не смогу помочь дальше; в последний раз мне приходилось работать с oracle более пяти лет назад, и я все еще оправляюсь от боли. И я прилично не могу установить экземпляр oracle.