процедура mysql: результат состоит из более чем одной строки с оператором select

Я создаю одну процедуру для своей регулярно повторяющейся работы.

В рамках этого есть один шаг для вставки нескольких строк из одной таблицы во временную таблицу.

CREATE TABLE `tmpUserList` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `user_type` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
      `first_name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
      `last_name` varchar(45) COLLATE utf8_unicode_ci NOT NULL
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

    ..... some more queries.


        INSERT INTO  tmpUserList ( 
                SELECT  id, user_type,first_name,last_name,  from user  where  id in  (usersId) 
        );


    SELECT * FROM tmpUserList; // return the result

Но выдает ошибку: Результат состоит из более чем одной строки


person RIYAJ KHAN    schedule 25.12.2018    source источник
comment
Это какая-то попытка найти дубликаты?   -  person P.Salmon    schedule 25.12.2018
comment
@P.Salmon нет. Он просто вставляет несколько строк во временную таблицу и возвращает результат из временной таблицы, вызывая процедуру   -  person RIYAJ KHAN    schedule 25.12.2018


Ответы (1)


Правильный синтаксис INSERT SELECT:

INSERT INTO tmpUserList(id, user_type,first_name,last_name)
SELECT id, user_type,first_name,last_name 
FROM user  
WHERE id IN (usersId);

Если usersId содержит несколько значений, вы можете использовать:

WHERE FIND_IN_SET(id, usersId);  -- table scan

Связано: Подготовленные операторы MySQL со списком переменных переменного размера

person Lukasz Szozda    schedule 25.12.2018
comment
будет ли он вставлять несколько строк из результата выбора, используя вставку в tmpUserList? - person RIYAJ KHAN; 25.12.2018
comment
@RIYAJKHAN Именно это и делает INSERT SELECT. Он будет вставлять столько строк, сколько возвращает независимый SELECT - person Lukasz Szozda; 25.12.2018
comment
выдает ошибку: результат состоит из более чем одной строки - person RIYAJ KHAN; 25.12.2018
comment
@RIYAJKHAN Почему вы не публикуете весь код? У вас, вероятно, есть оператор SELECT ... INTO внутри вашего SP. - person Lukasz Szozda; 25.12.2018
comment
У меня есть копии вашего ответа как есть. Нет заявления INTO - person RIYAJ KHAN; 25.12.2018
comment
мой плохой, в другом заявлении было исправление. Проголосовал и принял @Lukasz - person RIYAJ KHAN; 25.12.2018