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 PaperID=@paperid
       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 は複数の行を保持しています。where 句を使用してこれらの行をテーブルに挿入したいのですが、次のエラーが発生します。

「サブクエリは複数の行を返します」

たとえば、select を使用して結果 1,2,3 を取得した場合、ID=1 の 1,2,3 としてそれらを mytable (co_authors) に格納する必要があります。co_authors は列名です。

4

2 に答える 2

0

使用する

DECLARE cur CURSOR FOR select ...

次に、データを繰り返しcurて挿入します

それ以外の

SET @paperid=(SELECT ...
于 2013-02-22T03:50:32.557 に答える
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$$
于 2013-02-22T03:48:45.160 に答える