2012-08-23 1 views
0

질문이 있는데 아직 답변을 찾지 못한 것 같습니다 (힘든 문제를 해결했습니다).버그 - SELECT GROUP_CONCAT가 서브 쿼리에서 둘 이상의 행을 반환하는 방법은 무엇입니까?

오히려 큰 쿼리가 있습니다. 3-4 개월 후에 항목을 추가하고 응용 프로그램 내에서 작업하여 일부 변경이 이루어지면 group_concat이 포함 된 하위 쿼리가 1 행 이상을 반환했으며 group_concat은 1 줄에있는 모든 항목을 연결합니다.

단순화 된 쿼리는 다음과 같다 :이 subqery 나에게 1 개 이상의 행을 반환하고 내가 어떻게 이해하지

(SELECT * FROM (SELECT id, 
      (other_selects), 
    (SELECT GROUP_CONCAT(' ',IF(user_nume IS NOT NULL, (
        SELECT CONCAT(user_nume,' ',user_prenume) 
        FROM table 
        WHERE u2.user_id = cal_id_user 
        AND i1.cai_id = cal_id_imobil 
        ), (
         SELECT user_company 
         FROM table 
         WHERE u2.user_id = cal_id_user 
         AND i1.cai_id = cal_id_imobil 
         ))) 
    FROM table2 u2) as locatari, 
    (other selects) 
    ......................... 
    FROM table3 i1 
    ...... JOINS ............ 
GROUP BY cai_id 
ORDER BY cai_id DESC)t" ;) 

.

내가 테이블 이름을 제거한 것을 언급해야하며 JOINS 또는 다른 sintax 오류에는 문제가 없습니다. 이 문제에 대한

해결책은 IF 내부 상태 모두에 SELECTS

GROUP BY cal_id_user 

을 추가 하였다.

누군가이 문제를 해결할 수있는 방법을 설명해 주시겠습니까? 불행히도 이런 종류의 문제에 대한 정확한 답을 찾지 못했습니다.

감사합니다.

답변

1

문제는 MySQL에서 미묘한 GROUP BY 절없이 집계 함수를 사용할 수 있다는 것입니다. GROUP BY가 없으면 쿼리가 MySQL에서 작동하지만 이것이 정확하지 않다. (보십시오 MSSQL에서보십시오.)

+0

그래,하지만 SELECT GROUP_CONCAT (ID) FROM 테이블을 만들면 항상 그 열의 연결된 값으로 1 행을 되 돌리므로 둘 이상의 행을 반환하지 않아야합니다. GROUP BY를 사용하거나 사용하지 않아도됩니다. 만약 내가 다른 값들을 원한다면 나는 DISTINCT를 사용한다. – Cosmin

+0

MAX (id)를 하위 쿼리에서 사용하십시오. 다른 변경을하지 않으면 마지막 행을 선택합니다. –

+0

왜 마지막 행이 필요한지 알지 못합니다. – Cosmin

관련 문제