2013-02-22 2 views
0
CREATE DEFINER=`root`@`localhost` PROCEDURE `SampleProc`() 
    BEGIN 
      DECLARE X INT; 

      SET X = 1; 
      WHILE X <= 1890 DO 
      SET @paperid=(SELECT PaperID FROM scrpd_paper_authors WHERE AuthorID=X);  
     SELECT AuthorID FROM scrpd_paper_authors WHERE [email protected] 
     SET X = X + 1; 
      END WHILE; 
    END$$ 

DELIMITER ; 

mytable           scrpd_paper_authrs        

ID  co_authors        PaperID  AuthorId  
==== =========        =========  ======== 
1            1    1 
2            2    2 
3            3    3 
4            3    4 
5            3    5 

         mytable(expected result) 

          ID   co_authors 
         =====   ========== 
          1     0 
          2     0 
          3     4,5 
          4     3,5 
          5     3,4 

Итак, теперь AuthorID имеет несколько строк. Я хочу, чтобы вставить эти строки в таблице, используя ИНЕКЕ, но я получаю эту ошибку:Сохранение нескольких результатов из хранимых процедур в поле в mysql

"subquery returns more than one row"

Например, если я получаю 1,2,3 результаты по использованию избранных, я хочу, чтобы они были сохранены в mytable (co_authors) как 1,2,3, где ID = 1. co_authors - это имя столбца.

ответ

0

Использование

DECLARE cur CURSOR FOR select ... 

, а затем итерацию cur и вставки данных

вместо

SET @paperid=(SELECT ... 
+0

Я никогда не использовал курсор, не могли бы вы рассказать мне, как это точно работает и синтаксис – Shahzaib

+0

http://dev.mysql.com/doc/refman/5.0/en/cursors.html то, что вам нужно. – Alex

+0

может указывать курсор в цикле while, потому что, как показано в коде, мне нужно значение x для изменения на каждой итерации – Shahzaib

0

Я думаю, этот запрос, который вызвал ошибку:

SET @paperid=(SELECT PaperID FROM scrpd_paper_authors WHERE AuthorID=X);  

Попробуйте изменить запрос, как это:

CREATE DEFINER=`root`@`localhost` PROCEDURE `SampleProc`() 
BEGIN 
     DECLARE X INT; 

     SET X = 1; 
     WHILE X <= 1890 DO 
      INSERT INTO mytable(co_authors) 
      SELECT AuthorID FROM scrpd_paper_authors WHERE PaperID in (SELECT PaperID FROM scrpd_paper_authors WHERE AuthorID=X) 
      SET X = X + 1; 
     END WHILE; 
END$$ 
+0

С туЬаОй уже существует, я думаю, что я должен использовать обновление и когда я использую обновление я получаю ту же ошибку, что – Shahzaib

+0

вы имеете в виде с «уже существует»? мой запрос не имеет синтаксиса обновления –

+0

Его таблица с несколькими полями. Поле ID уже заполнено и теперь после обработки данных я хочу заполнить его поле co_author. Когда я использую вставку, она начинает вставляться сразу после предыдущей записи – Shahzaib

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