2014-06-24 25 views
1

您好,我有查詢,其中我使用select語句編寫更新語句。但不幸的是,獲取錯誤子查詢返回多於一行。我知道錯誤在哪裏。但我不知道同樣的解決方案。謝謝。 下面是該查詢:子查詢使用select語句返回多個行更新查詢的解決方案

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

你總是可以使用'LIMIT 1'你的子查詢可以避免這個錯誤,但是你需要修復你的子查詢來只返回你想要的行。 –

回答

1

當您使用SET configuration=(SELECT ...)更新的子查詢必須返回不超過一個值(一行)。如果返回多個值,那麼如何分配兩行表格,例如標量爲configuration的字段。所以你應該弄清楚爲什麼你的子查詢返回多於一行並修復子查詢,或者決定在多行中選擇哪一個值來更新。例如,您可以選擇最大值

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 .... 
+0

如果我使用限制1它的運行,但如果我想更新多行呢? – user3702602

+0

@ user3702602那麼你應該編輯你的問題,並添加數據的例子,以及你想在更新後得到什麼樣的輸出。目前還不清楚你想達到什麼目的。 – valex

+0

您可以更新多行。子查詢的結果將用於更新每一行。如果子查詢取決於正在更新的行,那麼它將在每行更新一次。 – Kickstart