Top.Mail.Ru
Ответы

Что не верно?

Добавьте новый товар в таблицу 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

По дате
По рейтингу
Аватар пользователя

Это не ошибка, это ограничение MySQL, описанное в официальной документации (раздел 13.2.15.12 Restrictions on Subqueries):

В MySQL нельзя изменять данные и одновременно делать выборку из той же таблицы в подзапросе. Рекомендуется использовать вложенный подзапрос:

1
 INSERT INTO Goods (good_id, good_name, type) VALUES ((SELECT * FROM (SELECT COUNT(*) FROM Goods) AS t) + 1, 'Table', 'equipment'); 
Аватар пользователя
Ученик

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')

Аватар пользователя
Ученик

Красиво. Спасибо.

Аватар пользователя
Ученик

Решение:

1234567891011
 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 
Аватар пользователя
Ученик

А можете объяснить, для чего вот тут "((SELECT COUNT(*)+1 FROM Goods AS a)" пишется as a. Почему без этого выдает ошибку, какая тут логика?

Аватар пользователя
Ученик

тоже интересно и нифига не понятно(

Аватар пользователя
Ученик

кстати, если убрать AS a, то выдаст ошибку, но если убрать AS b, то запрос выполнится успешно. Загадка прям какая-то...

Аватар пользователя
Оракул

Наверное, от вас хотят, чтобы вы сами узнали число записей в таблице и вписали его в запрос числом.

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

Вместо этого вам нужно сперва завести строчку в GoodTypes и туда вписать айдишник и наименование. А уже потом добавлять в Goods строчку с type, равным айдишнику добавленного вами GoodType.



Видео по теме