2011-11-21 3 views
0

나는 온통 많은 조인을 가진 상당히 복잡한 쿼리를 가지고 있습니다. 쿼리 자체는 완벽하게 작동하며 ID 별 적절한 그룹화를 통해 고유 값만 표시하고 필드를 고려하여 GROUP BY을 사용하고 있으며 일련 번호가 포함 된 3 개의 필드가 있습니다.그룹 내에서 검색과 일치하는 행을 검색하고 반환합니다.

문제는 동일한 ID를 공유하는 3 개의 행이 있다고 가정 해 보겠습니다. 수단 그룹핑으로하면

Row  ID  SN1  SN2  SN3 
1  1  abc123 (null) (null) 
2  1  (null) def456 (null) 
3  1  (null) (null) xyz789 

는 ID, 첫 번째 행 괜찮 레코드에 나타나지만 또한 : 그 세 개의 행들 각각 세 개의 일련 번호 열의 다른 일련 번호, 유사한 아래에있을 LIKE '%def%'을 수행하면 행이 전혀 표시되지 않습니다.

MySQL은 WHERE 부분 또는 GROUP BY를 먼저 수행합니까? 먼저 그룹화 된 것 같습니다. 따라서 LIKE '%abc%' 만 작동합니다. 그 주문을 교환 할 방법이 있습니까?

실제 검색어는 60 줄이므로 붙여 넣기를 정말로하고 싶지는 않지만 절대적으로 필요하다면 그렇게 할 것입니다.

답변

1

WHEREGROUP BY 전에 적용됩니다.

먼저 필터링 한 다음 그룹화하려면 WHERE 조건을 사용하십시오. GROUP BY을 먼저 필터링 한 다음 HAVING 절을 사용하십시오.

모든 일련 번호를 결과에 포함하려면 집계 단계에서 SELECT GROUP_CONCAT(SN1) AS all_sn1을 사용할 수 있습니다. 설명서의 GROUP_CONCA에 대한 추가 정보

세 열 모두의 모든 일련 번호를 한 열에 모두 포함하려면 함께 연결하십시오. 가능한 한 가지 방법은 다음과 같습니다.

SELECT COALESCE(GROUP_CONCAT(SN1) || ' ', '') 
    || COALESCE(GROUP_CONCAT(SN1) || ' ', '') 
    || COALESCE(GROUP_CONCAT(SN1), '') 

후행 sapce가있을 수 있습니다. Trim 그게 상관.

+0

감사합니다. 올바른 길을 찾아 주셔서 감사합니다. 어쨌든 나는 그 기능을 간과했다. (나는 전에 그것을 사용했다.) ... 나는 정확한 일치 검색을 원했지만, 그것은 오히려 작동 할 것이다. +1 – David

관련 문제