首页 文章

子查询返回超过1行 - MySQL

提问于
浏览
1
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行

谁能帮我解决问题?

4 回答

  • 0

    请改用 joins

    update pams_faker_lead_location l
    inner join pams_leads pm on pm.location_id = l.id
    set l.location = pm.location
    
  • 0

    这个查询:

    SELECT location FROM pams_leads WHERE pams_leads.location_id = pams_faker_lead_location.id
    

    给你超过1行 . 你必须改变一些东西,因为如果你需要更新 Value ,你需要 exactly one row

  • 0

    试试这个:

    UPDATE A
    SET A.`location` =  B.`location`
    FROM `pams_faker_lead_location` A
    JOIN `pams_leads` B ON B.location_id = A.id
    
  • 0

    你得到的错误信息的哪一部分?子查询返回多行,因此您需要确定所需的值 . 以下是获取一行的两种常用方法:

    一个使用聚合函数,例如 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 ,因此您可以选择所需的值:

    UPDATE pams_faker_lead_location fll 
        SET location = (SELECT l.location
                        FROM pams_leads l
                        WHERE l.location_id = fll.id
                        LIMIT 1
                       );
    

    发生错误是因为数据不符合您的预期 . 使用诸如 JOIN 之类的方法仅仅隐藏了问题 - 如果存在大量重复,可能会导致严重的性能损失 .

相关问题