SELECT * ,
(SELECT ZoneName
FROM zone_message_master
WHERE ZoneID = zoneid) 'ZoneName'
FROM zone_master
WHERE ZoneID=zoneid;
这是在存储过程中运行的查询,我收到错误
子查询返回超过 1 行
谁能告诉我我在这里做错了什么?
我在这里做错了什么?
你得到的错误很清楚。子查询必须只返回一行,您可以使用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
这意味着您 zone_message_master
的zoneid
. 这个查询会更正确:
SELECT zm.* , zmm.ZoneName
FROM zone_master zm
JOIN zone_message_master zmm ON zm.ZoneID=zmm.ZoneID
WHERE zm.ZoneID=zoneid;
问题可能与您收到的错误消息一样清楚。您可以欺骗子查询只返回一行,但事实并非如此。如我所见,您的意图是该表zone_message_master
应具有唯一ZoneID
值。为了正确,您应该在zone_message_master.ZoneID
列上创建一个唯一索引。这当然需要对该表进行一些清洁,但最终会让您确保它正常工作。