声明子查询的MySQL存储过程返回超过1行
如果执行此SQL:声明子查询的MySQL存储过程返回超过1行,mysql,stored-procedures,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 @
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
它仍然返回相同的错误。请确保
SET @myId = (SELECT `MyId` from `LinkTable` where `LinkTableId` = myLinkTableId);
此子查询仅返回1行。@RaymondNijland但如果在SP之外使用相同的参数运行它,它将返回一行。源中是否有空值?@jimmy8ball可能有空字段。不应该是整行的空id吗?@jimmy8ball不应该。它们都是键。我有-这就是上面的代码想要演示的。@MattThrower,将过程参数名称linkTableId更改为MyLinkTableId很好,但这不是原始代码中的问题。检查这里@MattThrower,出于测试目的,您可以在子查询中添加限制1