【发布时间】:2013-02-04 06:44:07
【问题描述】:
我在尝试执行此查询时收到“错误:#1242 - 子查询返回超过 1 行”:
SELECT id FROM postcodes WHERE pcd LIKE (SELECT CONCAT(pcd,' %') FROM towns WHERE id IN (31898,12828,15771,7604))
您对此查询有什么建议吗?
【问题讨论】:
我在尝试执行此查询时收到“错误:#1242 - 子查询返回超过 1 行”:
SELECT id FROM postcodes WHERE pcd LIKE (SELECT CONCAT(pcd,' %') FROM towns WHERE id IN (31898,12828,15771,7604))
您对此查询有什么建议吗?
【问题讨论】:
JOIN 两个表而不是IN 谓词,像这样:
SELECT p.id
FROM postcodes p
INNER JOIN towns t ON p.pcd LIKE CONCAT(t.pcd,' %')
WHERE t.id IN (31898,12828,15771,7604);
【讨论】:
检查这个查询:
SELECT CONCAT(pcd,' %') FROM towns WHERE id IN (31898,12828,15771,7604)
也许它的结果不止一行。
或者你可以限制子查询结果。
SELECT id FROM postcodes WHERE pcd LIKE (SELECT CONCAT(pcd,' %') FROM towns WHERE id IN (31898,12828,15771,7604) LIMIT 1)
【讨论】:
您必须将子查询限制为一行。您应该添加一些过滤器以将结果限制为一行,或者将LIMIT 1 添加到您的子查询中会为您解决问题。
【讨论】: