您好我有查询,其中我使用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
答案 0 :(得分:1)
当您使用SET configuration=(SELECT ...)
更新时,子查询必须返回不超过一个值(一行)。如果它返回多个值,您如何将两行表分配给标量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 ....
答案 1 :(得分:1)
您必须首先考虑要做什么。
是否要获取一个值并将其保存在其他位置? 然后使用SET值=(SELECT ...)。为此,您需要确保内部语句不会返回多个值。
或
您是否需要能够处理多个值? 您要如何处理这些?保存全部吗?全部合为一体(使用concat)还是单独存储(每个结果一个更新)?还是选择其中之一?也许是第一个(LIMIT 1)或最高(MAX)或最低(MIN)值?