小编典典

子查询使用select语句返回超过1行的更新查询解决方案

sql

您好,我有查询,其中我已使用select语句编写了更新语句。但是不幸的是,子查询返回错误会返回1行以上的错误。我知道错误即将到来。但我不知道相同的解决方案。谢谢。这是查询:

UPDATE adsetest.dashboard_widget_users
SET configuration=
  (SELECT DISTINCT ad_news_texte.headline
   FROM autodo.ad_news_texte
   INNER JOIN autodo.ad_news_oe
     ON ad_news_texte.news_id = ad_news_oe.id_ad_news
   INNER JOIN autodo.ad_news
     ON ad_news_oe.id_ad_news = ad_news.id
   WHERE ad_news.datum_archiv BETWEEN
     curdate() - INTERVAL DAYOFWEEK(curdate()) + 28 DAY AND curdate())
WHERE dsnr_yw_user = 1 AND dsnr_dashboard_widget = 1

阅读 199

收藏
2021-04-14

共1个答案

小编典典

当您SET configuration=(SELECT ...)对子查询使用update时,必须返回不超过一个值(一行)。如果返回多个值,如何将两行表分配给标量configuration字段。因此,您应该弄清楚为什么子查询返回多于一行的内容,并修复该子查询,或者确定多于一行的情况下选择哪个ONE值来进行更新。例如,您可以选择最大值

SELECT MAX(ad_news_texte.headline)...

或任何一个第一值

(SELECT ad_news_texte.headline)... LIMIT 1)

等等…

如果需要连接所有行并将其放入一行configureation,则可以使用GROUP_CONCAT() mysql函数:

SET configuration=(SELECT GROUP_CONCAT(DISTINCT ad_news_texte.headline) FROM ....
2021-04-14