声明子查询的MySQL存储过程返回超过1行

时间:2018-03-29 14:40:31

标签: mysql stored-procedures

如果我执行此SQL:

SET @myId = (SELECT `MyId` from `LinkTable` where `LinkTableId` = '73548055');
SELECT * FROM `MyTable` AS `Extent1` WHERE  `Extent1`.`MyId` = @myId;

我得到一排。

如果我把它放在存储过程中:

PROCEDURE `Get_Results`(IN linkTableId nvarchar(255))
BEGIN


    SET @myId = (SELECT `MyId` from `LinkTable` where `LinkTableId` = linkTableId);
    SELECT * FROM `MyTable` AS `Extent1` WHERE  `Extent1`.`MyId` = @myId;

END

CALL `Get_Results`('73548055')

我收到错误

  

错误代码:1242。子查询返回的行数超过1行

为什么?

编辑:为了感兴趣,我只是尝试将SP更改为

PROCEDURE `Get_Results`(IN linkTableId nvarchar(255))
BEGIN

    SELECT * FROM `MyTable` AS `Extent1` WHERE  `Extent1`.`MyId` IN (SELECT `MyId` from `LinkTable` where `LinkTableId` = linkTableId);
END

仍然返回相同的错误。

1 个答案:

答案 0 :(得分:1)

确保

SET @myId = (SELECT `MyId` from `LinkTable` where `LinkTableId` = myLinkTableId);

此子查询仅返回1行。