2015-04-24 3 views
0

Я пытаюсь вставить несколько записей, как это:Mysql Вставка с подзапрос

SET @user_id = (select `id` from users where `email` IN('[email protected]', '[email protected]')); 

SET @badge_id = (select `id` from badges where `slug` = 'elearning_nutrition'); 

INSERT INTO `instructor_badges` (`id`, `user_id`, `badge_id`, `is_active`, `is_manual`, `created`) 
VALUES (UUID(), @user_id, @badge_id, '1', '0', NOW()); 

, но им получать эту ошибку:

[ERROR in query 1] Subquery returns more than 1 row

В этом случае я должен был бы вставить 2 записей. Как я могу выполнить этот запрос?

+0

Вы хотите вставить две записи? Или вы просто хотите победить ошибку «Subquery возвращает более 1 строки»? Во втором случае просто поставьте «LIMIT 1» на свои подзапросы. – dgig

ответ

1

Вы можете попробовать это. Тем не менее, это приведет к обратному подключению пользователей к значкам. Поэтому, если вы выберете двух пользователей и два значка, вы получите четыре строки для вставки. Но я думаю, это то, что вы говорите, чего хотите достичь.

INSERT INTO instructor_badges (id, user_id, badge_id, is_active, is_manual, created) 
SELECT UUID(), users.id, badges.id, '1', '0', NOW() 
FROM users 
JOIN badge 
WHERE users.email IN('[email protected]', '[email protected]') 
&& badges.slug = 'elearning_nutrition' 
+0

Спасибо, что в моем случае значок только один. Что вы думаете, если я делаю что-то подобное, что я вижу, тоже работает. SET @badge_id = (выберите 'id' из значков, где' slug' = 'elearning_nutrition'); INSERT INTO 'instructionor_badges' (' user_id', 'id',' badge_id', 'is_active',' is_manual', 'created') выберите' id', UUID(), @badge_id, '1', '0 ', NOW() от пользователей, где 'email' IN (' [email protected] ',' [email protected] ') –

+0

Да, это выглядит прекрасно для меня. –

+0

Обратите внимание, что вы также можете просто использовать свой подзапрос напрямую, если хотите избежать переменной @ @ badge_id. –

0

OK Я решил таким образом, есть еще лучший способ, потому что я должен был написать user_id в первой позиции:

SET @badge_id = (select `id` from badges where `slug` = 'elearning_nutrition'); 

INSERT INTO `instructor_badges` (`user_id`, `id`, `badge_id`, `is_active`, `is_manual`, `created`) 
select `id` , UUID(), @badge_id , '1', '0', NOW() from users where `email` IN('[email protected]', 'german+22334[email protected]') 
+0

Зачем вам писать на первой позиции? –

+0

В будущем вы можете просто отредактировать мой ответ, а не предоставлять свои собственные, чтобы мы получили больше согласия относительно правильного ответа. Благодарю. –

Смежные вопросы