Mysql 1093 - таблица указана дважды - PullRequest
1 голос
/ 07 марта 2020

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

1093 Ошибка в MySQL таблица указана дважды

, но ответ мне не помогает

У меня есть эта таблица счетов

Accounts table

Но я сталкиваюсь с ошибкой 1093 - Таблица указывается дважды при попытке обновить баланс счета Хотя я даю таблице два имени t1 и t2

UPDATE accounts t1 
SET Account_Balance = Account_Balance+(
    SELECT SUM(Credit)-SUM(Debit) 
    FROM accounts  t2   
    WHERE Account_Id=1
) 

Создание выписки из таблицы счетов

CREATE TABLE `accounts` (
 `Account_Id` int(11) NOT NULL AUTO_INCREMENT,
 `Account_Name` varchar(100) NOT NULL,
 `Account_Name_English` varchar(50) NOT NULL,
 `Account_Balance` decimal(15,2) NOT NULL DEFAULT '0.00',
 `Credit` decimal(15,2) NOT NULL DEFAULT '0.00',
 `Debit` decimal(15,2) NOT NULL DEFAULT '0.00',
 PRIMARY KEY (`Account_Id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8

1 Ответ

2 голосов
/ 07 марта 2020

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

UPDATE accounts t1
CROSS JOIN (SELECT SUM(Credit)-SUM(Debit) AS `change`
            FROM accounts
            WHERE Account_Id=1) t2
SET t1.Account_Balance = t1.Account_Balance + t2.change

Примечание. Я не уверен, что расположение WHERE Account_Id = 1 указано правильно; это обновит все Account_Balance полей в accounts до их старого баланса плюс изменение с Account_Id 1. Если это то, что вы хотите, это нормально, в противном случае вам может понадобиться дополнительный WHERE предложение UPDATE, т.е.

UPDATE accounts t1
CROSS JOIN (SELECT SUM(Credit)-SUM(Debit) AS `change`
            FROM accounts
            WHERE Account_Id=1) t2
SET t1.Account_Balance = t1.Account_Balance + t2.change
WHERE Account_Id = 1

Или для обновления всех учетных записей с их собственным изменением:

UPDATE accounts t1
JOIN (SELECT Account_Id, SUM(Credit)-SUM(Debit) AS `change`
      FROM accounts
      GROUP BY Account_Id) t2 ON t2.Account_Id = t1.Account_Id
SET t1.Account_Balance = t1.Account_Balance + t2.change

Вот демонстрационная версия всех трех запросов в работа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...