MySQL ошибка: «Таблица указывается дважды как в качестве цели для INSERT, так и в качестве отдельного источника данных» - PullRequest
0 голосов
/ 03 апреля 2020

Я запускаю этот запрос, но он выдает ошибку, как в названии:

[ПРОБЛЕМА 1]

INSERT INTO Clients(IdClient, Entity)
VALUES((SELECT max(IdClient) + 1 FROM Clients), '--New--')

Я пытался решить его с помощью такой подзапрос:

INSERT INTO Clients(IdClient, Entity)
VALUES
    (
        (SELECT maxClient FROM
        (SELECT max(IdClient) + 1 maxClient FROM Clients)) subquery,
    '--New--' 
    )

, но он не работает. Кто-нибудь может мне помочь, пожалуйста?

ОБНОВЛЕНИЕ

[РЕШЕНИЕ ПРОБЛЕМЫ 1]

Наконец я протестировал запрос VirCom и это работало, но включало заданные c имена столбцов:

INSERT INTO Clients(IdClient, Entity)
SELECT max(IdClient) + 1, '--New--' FROM Clients

[НОВАЯ ПРОБЛЕМА 2]

Но у меня возникает новая проблема, если я запускаю этот запрос с другим "подзапросом", как я могу сделать это запрос, пожалуйста? Это пример

INSERT INTO Clients(IdClient, Entity, Country)
SELECT max(IdClient) + 1, '--New--' FROM Clients,
SELECT IdCountry FROM Country WHERE Country = 'SPAIN'

Кто-нибудь может мне помочь, пожалуйста?

Большое спасибо.

Wardiam

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Не делай этого! Определите столбец автоинкремента в таблице и позвольте базе данных обработать это для вас:

create table clients (
    idclient int auto_increment primar key,
    entity ?,
    . . .
);

Затем просто оставьте его, чтобы появилось новое значение:

insert into clients (Entity)
    values ('--New--');

Ваша версия зависит от условий гонки (где разные потоки имеют одинаковое максимальное значение). Также может потребоваться сканирование всей таблицы.

1 голос
/ 03 апреля 2020

Я проверял это с помощью запроса:

INSERT INTO Clients SELECT MAX(IdClient) + 1, '--New--' FROM Clients;

И это работает)

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