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

本教程将介绍子查询使用select语句返回多于1行的更新查询解决方案的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

子查询使用select语句返回多于1行的更新查询解决方案 教程 第1张

问题描述

您好,我有一个查询,其中我使用 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

推荐答案

当你使用 update 和 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 ....

好了关于子查询使用select语句返回多于1行的更新查询解决方案的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。