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

Обновление Sql - запроса, клиент с id=3 увеличил баланс своего счета на 10


таблица клиентов (CUST_ID,CUST_NAME,CUST_ADDRESS,EMP_ID)
имеет таблицу (CUST_ID,ACCOUNT_NUMBER)
таблица счет(ACCOUNT_NUMBER,ACCOUNT_BALANCE)

У клиента с id=3 остатки на счете увеличились на 10%

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

UPDATE account
SET account.account_balance = account.account_balance * 1.1
WHERE EXISTS (SELECT a.account_number
             FROM account a,has h
             where a.account_number = h.account_number
             and h.cust_id=3)


Он обновляет все строки, которые мне нужно обновить, только когда H. CUST_ID=3

PIEBALDconsult

Была ли помощь, которую вы получали раньше, не полезной?
https://www.codeproject.com/Questions/5260382/Sql-query-to-be-solved-the-salary-of-employee-deal

Abed Al Rahman Hussien Balhawan

Здравствуйте, я пробовал эти запросы, и они не работали на oracle database10G

Я попробовал это на подобном случае , он работает довольно хорошо, но здесь он обновляет все строки, я не понимаю, почему он не читает последнее утверждение
(((и h.cust_id=3)))

PIEBALDconsult

Пожалуйста, будьте уверены, что он делает именно то, о чем вы его просили.

Abed Al Rahman Hussien Balhawan

я все исправил
Обновить учетную запись
Настройка учетной записи.account_balance = счета.account_balance * 1.1
Где существует (выберите h.account_number
От ч
где account.account_number = h.account_number
и h.cust_id=3)

PIEBALDconsult

EXISTS-это крик о помощи, не используйте его, просто используйте JOIN (хотя я не понимаю синтаксиса соединения Oracle, bleah).

Abed Al Rahman Hussien Balhawan

Теперь я попытаюсь сделать это с помощью внутреннего соединения.

PIEBALDconsult

Пожалуйста, сделай. Жизнь станет легче.

2 Ответов

Рейтинг:
8

Abed Al Rahman Hussien Balhawan

UPDATE account
SET account.account_balance = account.account_balance * 1.1
WHERE EXISTS (SELECT h.account_number
             FROM has h
             where account.account_number = h.account_number
             and h.cust_id=3) 


Рейтинг:
16

MadMyche

Вам действительно нужно провести еще несколько исследований в этой области. EXISTS оператор, и используйте то, что вы узнали ранее об использовании его против a JOIN

UPDATE a
SET    a.Account_Balance = a.Account_Balance * 1.1
FROM   Account a
INNER JOIN Has h ON a.Account_Number = h.Account_Number
WHERE h.Cust_ID = 3
Красоту, используя в JOIN заявление для компании UPDATE есть возможность предварительно проверить его легко... просто прокомментируйте это UPDATE...SET строки в приведенном выше запросе и добавить в простой SELECT вот так, чтобы увидеть, какие строки будут затронуты и до/после значений; вот так
--	UPDATE a
--	SET    a.Account_Balance = a.Account_Balance * 1.1
	SELECT h.Cust_ID, a.Account_Balance, NewBalance = a.Account_Balance * 1.1
	FROM   Account a
	INNER JOIN Has h ON a.Account_Number = h.Account_Number
	WHERE h.Cust_ID = 3


Abed Al Rahman Hussien Balhawan

ваша версия не работала на моем oracle10G

я изменил его следующим образом

Выберите Cust_ID, Account_Balance,Account_Balance*1.1 в качестве NewBalance
Из учетной записи
Внутреннее соединение имеет h на a.Account_Number = h.Account_Number
Где h.Cust_ID = 3

Конечный:
CUST_ID ACCOUNT_BALANCE NEWBALANCE
3 440 484
3 550 605

спасибо за информацию Мадмич я очень ценю это :)

MadMyche

Oracle и Sql Server имеют несколько разные разрешенные синтаксисы, когда дело доходит до псевдонимов, хорошая работа, чтобы понять это.
И ваши результаты не являются неожиданными, так как 1 клиент может иметь несколько учетных записей

Abed Al Rahman Hussien Balhawan

я попробовал обновить его с помощью метода внутреннего соединения, но это не сработало
код ошибки : ORA-00933: SQL-команда не завершена должным образом