2
SELECT * ,
  (SELECT ZoneName 
   FROM zone_message_master 
   WHERE ZoneID = zoneid) 'ZoneName' 
FROM zone_master 
WHERE ZoneID=zoneid;

这是在存储过程中运行的查询,我收到错误

子查询返回超过 1 行

谁能告诉我我在这里做错了什么?

4

3 回答 3

2

我在这里做错了什么?

你得到的错误很清楚。子查询必须只返回一行,您可以使用ORDER BY ... LIMIT 1.

我该如何解决?

你不需要一个子查询,JOIN这两个表直接像这样:

SELECT z.ZoneId, zm.ZoneName
FROM zone_message_master zm
INNER JOIN zone_master z ON zm.ZoneId = z.ZoneId
于 2012-10-11T07:32:20.427 回答
1

这意味着您 zone_message_masterzoneid. 这个查询会更正确:

SELECT zm.* , zmm.ZoneName 
FROM zone_master zm
JOIN zone_message_master zmm ON zm.ZoneID=zmm.ZoneID
WHERE zm.ZoneID=zoneid;
于 2012-10-11T07:35:52.727 回答
0

问题可能与您收到的错误消息一样清楚。您可以欺骗子查询只返回一行,但事实并非如此。如我所见,您的意图是该表zone_message_master应具有唯一ZoneID值。为了正确,您应该在zone_message_master.ZoneID列上创建一个唯一索引。这当然需要对该表进行一些清洁,但最终会让您确保它正常工作。

于 2012-10-11T07:38:47.443 回答