2014-06-24 2 views
1

안녕하세요. select 문을 사용하여 업데이트 문을 작성한 쿼리가 있습니다. 하지만 불행히도 오류 서브 쿼리를 얻는 것은 1 행 이상을 반환합니다. 나는 어디에서 오류가 오는지 알고있다. 하지만 같은 해결책을 모릅니다. 고마워요.하위 쿼리는 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 필드에 지정하십시오. 따라서 하위 쿼리가 둘 이상의 행을 반환하는 이유와 하위 쿼리를 수정하거나 둘 이상의 행의 경우 업데이트를 위해 선택할 ONE 값을 결정해야하는 이유를 알아야합니다. 당신이 모든 행을 연결하고 하나의 행 configureation에 넣어해야하는 경우 예를 들어, 당신은

SELECT MAX(ad_news_texte.headline)... 

또는 하나의 제 값 등

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

및 ...

를 최대 값을 선택할 수 있습니다 당신은 GROUP_CONCAT() mysql 함수를 사용할 수 있습니다 :

SET configuration=(SELECT GROUP_CONCAT(DISTINCT ad_news_texte.headline) FROM .... 
+0

제한 1을 사용하면 실행되지만 여러 행을 업데이트하려면 어떻게해야합니까? – user3702602

+0

@ user3702602 질문을 수정하고 데이터 예제와 업데이트 후 출력으로 가져 가고 싶은 것을 추가해야합니다. 당신이 달성하기를 원하는 것이 명확하지 않습니다. – valex

+0

여러 행을 업데이트 할 수 있습니다. 하위 쿼리의 결과는 각 행을 업데이트하는 데 사용됩니다. 하위 쿼리가 업데이트되는 행에 종속 된 경우 업데이트 될 행 당 한 번 실행됩니다. – Kickstart

관련 문제