Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Что не верно?

Глеб Лебедев Ученик (95), закрыт 9 месяцев назад
Добавьте новый товар в таблицу Goods с именем «Table» и типом «equipment».
В качестве первичного ключа (good_id) укажите количество записей в таблице + 1.

INSERT INTO Goods (good_id, good_name, type)
VALUES ((SELECT COUNT(*) FROM Goods) + 1, 'Table', 'equipment');
пишет что не правильно
Выдает
ER_UPDATE_TABLE_USED: You can't specify target table 'Goods' for update in FROM clause
Лучший ответ
Алексей Пинчук Мудрец (15746) 10 месяцев назад
Это не ошибка, это ограничение MySQL, описанное в официальной документации (раздел 13.2.15.12 Restrictions on Subqueries):

В MySQL нельзя изменять данные и одновременно делать выборку из той же таблицы в подзапросе. Рекомендуется использовать вложенный подзапрос:
 INSERT INTO Goods (good_id, good_name, type) VALUES ((SELECT * FROM (SELECT COUNT(*) FROM Goods) AS t) + 1, 'Table', 'equipment'); 
Остальные ответы
Андрей Панарин Искусственный Интеллект (224512) 10 месяцев назад
Наверное, от вас хотят, чтобы вы сами узнали число записей в таблице и вписали его в запрос числом.

Есть еще одна проблема: в Goods поле type имеет тип int.
Поэтому вы не можете вписать в него строку 'equipment'.

Вместо этого вам нужно сперва завести строчку в GoodTypes и туда вписать айдишник и наименование. А уже потом добавлять в Goods строчку с type, равным айдишнику добавленного вами GoodType.
ego_evil Ученик (100) 10 месяцев назад
INSERT INTO Goods
SET good_id = (SELECT COUNT(*)+1 FROM Goods AS a),
good_name = 'Table',
type = (SELECT good_type_id FROM GoodTypes WHERE good_type_name='equipment')
Данил Ткачев Ученик (118) 9 месяцев назад
Решение:

 INSERT INTO Goods  (good_id, good_name, type) 

VALUE ((SELECT COUNT(*)+1 FROM Goods AS a),

'Table',

(SELECT good_type_id FROM GoodTypes AS b WHERE good_type_name ='equipment'));



SELECT * FROM Goods
Похожие вопросы