SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.10.2010 15:46:19

bacek
Участник
Зарегистрирован: 09.10.2010
Сообщений: 2

Нужна ваша помощь

Помогите сделать из 3 запросов 1
SELECT characters.charid FROM `characters` WHERE characters.level < 20;

SELECT MAX(`object_id`)+1 FROM `items`;

INSERT INTO `items` SET `owner_id`= (запрос1),`object_id`= (запрос2),`item_id`='111',`count`='1',`enchant_level`='0',`loc`='INVENTORY';

в 1 значении выводится много значений

надо вставить 1 и 2 запросы в 3 .....

Неактивен

 

#2 09.10.2010 22:33:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Нужна ваша помощь

Используйте оператор IN вместо =.

Неактивен

 

#3 10.10.2010 10:50:45

bacek
Участник
Зарегистрирован: 09.10.2010
Сообщений: 2

Re: Нужна ваша помощь

Так
INSERT INTO `items` SET `owner_id` in (SELECT characters.charid FROM characters WHERE characters.level < 20) ,`object_id` in (SELECT MAX(`object_id`)+1 FROM `items`),`item_id`='111',`count`='1',`enchant_level`='0',`loc`='INVENTORY';
Пишет
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'in (SELECT characters.charid FROM characters WHERE characters.level < 20) ,`obje' at line 1

Так
INSERT INTO `items` SET `owner_id` = (SELECT characters.charid FROM characters WHERE characters.level < 20) ,`object_id` = '7668',`item_id`='111',`count`='1',`enchant_level`='0',`loc`='INVENTORY';
Пишет
1242 - Subquery returns more than 1 row

Так
INSERT INTO `items` SET `owner_id` = (SELECT characters.charid FROM characters WHERE characters.level < 20) ,`object_id` = (SELECT MAX(`object_id`)+1 FROM `items`),`item_id`='111',`count`='1',`enchant_level`='0',`loc`='INVENTORY';
Пишет
1093 - You can't specify target table 'items' for update in FROM clause

Помогите пожалуйста....

Неактивен

 

#4 10.10.2010 15:19:41

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Нужна ваша помощь

Брр, мне показалось, что у Вас там SELECT smile

Тогда никак, на каждую строку исходных данных Вам нужно делать отдельную строку
в INSERT. Самое близкое, что можно сделать, — использовать синтаксис INSERT … SELECT:

INSERT INTO items
SELECT NULL, 111, 1, 0, 'INVENTORY', charid
FROM characters WHERE level < 20;

Порядок полей должен быть правильным, NULL должен приходиться на поле object_id, на
котором нужно прописать флаг AUTO_INCREMENT.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson