Возможно, я что-то делаю не так, я искал это раньше и нахожу некоторые обходные пути, которые говорят мне, что это невозможно в MySQL, другие пишут, что это из-за оптимизатора MySQL, так что вы можете просто отключить его и продолжить, но это не работает для меня.
Я только хочу обойти это. Единственная таблица, в которой я могу найти id_address_delivery и id_address_invoice, - из таблицы заказов, эти данные также есть в других таблицах, но могут быть нулевыми, поэтому нет возможности искать их в другом месте.
SET optimizer_switch = 'derived_merge=off';
update orders
set id_customer = (select id_customer from customer where email like 'foo@foo.com'),
id_address_delivery = (select id_address_delivery from orders where id_customer = (select id_customer from customer where email like 'foo@foo.com') LIMIT 1),
id_address_invoice = (select id_address_invoice from orders where id_customer = (select id_customer from customer where email like 'foo@foo.com') LIMIT 1)
where id_customer = (select id_customer from customer where email like 'foo2@foo2.com');
Я получаю Код ошибки: 1093. Вы не можете указать «заказы» целевой таблицы для обновления в предложении FROM в MySQL, даже если я подаю заявку
SET optimizer_switch = 'derived_merge=off';
Есть ли возможность справиться с этой ситуацией?
я благодарю за установку некоторых переменных, например:
SET @iad = (select id_address_delivery from orders where id_customer = (select id_customer from customer where email like 'foo@foo.com') LIMIT 1);
затем установите эту переменную в качестве значения:
id_address_delivery = @iad;
Я не получаю сообщение об ошибке при этом, но оно длится очень много (я точно не знаю, почему), и появляется сообщение тайм-аута (30 секунд). Я попытался поставить его на 120 секунд и получить тот же тайм-аут сообщение.
EDIT:
Я пытался с псевдонимом, но безрезультатно. Та же ошибка:
update orders AS sor
set sor.id_customer = (select id_customer from customer where email like 'foo@foo.com'),
sor.id_address_delivery = (select a.id_address_delivery from orders as a where a.id_customer = (select id_customer from customer where email like 'foo@foo.com') LIMIT 1),
sor.id_address_invoice = (select b.id_address_invoice from orders as b where b.id_customer = (select id_customer from customer where email like 'foo@foo.com') LIMIT 1)
where pso.id_customer = (select id_customer from customer where email like 'foo2@foo2.com');
/ EDIT:
Я прочитал несколько постов, которые помечены как одна и та же проблема, но там я нахожу некоторые обходные пути для других предложений и не могу понять, как применить то же самое в моем конкретном случае.
Как я могу продолжить?
Спасибо.