UPDATE `pams_faker_lead_location` SET `location` = ( SELECT location FROM pams_leads WHERE pams_leads.location_id = pams_faker_lead_location.id )
我不知道当我在Mysql中运行查询时,会发生此错误 .
#1242 - 子查询返回超过1行
谁能帮我解决问题?
请改用 joins
joins
update pams_faker_lead_location l inner join pams_leads pm on pm.location_id = l.id set l.location = pm.location
这个查询:
SELECT location FROM pams_leads WHERE pams_leads.location_id = pams_faker_lead_location.id
给你超过1行 . 你必须改变一些东西,因为如果你需要更新 Value ,你需要 exactly one row
试试这个:
UPDATE A SET A.`location` = B.`location` FROM `pams_faker_lead_location` A JOIN `pams_leads` B ON B.location_id = A.id
你得到的错误信息的哪一部分?子查询返回多行,因此您需要确定所需的值 . 以下是获取一行的两种常用方法:
一个使用聚合函数,例如 MAX() 或 MIN() :
MAX()
MIN()
UPDATE pams_faker_lead_location fll SET location = (SELECT MAX(l.location) FROM pams_leads l WHERE l.location_id = fll.id LIMIT 1 );
另一个使用 LIMIT . 这通常也会有 ORDER BY ,因此您可以选择所需的值:
LIMIT
ORDER BY
UPDATE pams_faker_lead_location fll SET location = (SELECT l.location FROM pams_leads l WHERE l.location_id = fll.id LIMIT 1 );
发生错误是因为数据不符合您的预期 . 使用诸如 JOIN 之类的方法仅仅隐藏了问题 - 如果存在大量重复,可能会导致严重的性能损失 .
JOIN
4 回答
请改用
joins
这个查询:
给你超过1行 . 你必须改变一些东西,因为如果你需要更新 Value ,你需要 exactly one row
试试这个:
你得到的错误信息的哪一部分?子查询返回多行,因此您需要确定所需的值 . 以下是获取一行的两种常用方法:
一个使用聚合函数,例如
MAX()
或MIN()
:另一个使用
LIMIT
. 这通常也会有ORDER BY
,因此您可以选择所需的值:发生错误是因为数据不符合您的预期 . 使用诸如
JOIN
之类的方法仅仅隐藏了问题 - 如果存在大量重复,可能会导致严重的性能损失 .