UNION
연산자는 암시 적 정렬 (IIRC, 키 열)을 수행하기 위해 암시 적 정렬을 수행합니다.
결과에서 다른 정렬을 원할 경우 ORDER BY
을 결합 선택 영역에 적용해야합니다.
첫 번째 선택 사항과 두 번째 선택 사항을 구별 할 수있는 방법이 필요하므로 합법적으로 주문할 수 있습니다. (테스트되지 않은) 식으로 뭔가 :이 방법
(SELECT table1.*, 0 AS TMP_ORDER FROM table1 ORDER BY fieldA ASC LIMIT 3)
UNION
(SELECT table1.*, 1 AS TMP_ORDER FROM table1)
ORDER BY TMP_ORDER ASC,
CASE WHEN TMP_ORDER = 0 THEN fieldA ELSE 0 END ASC,
CASE WHEN TMP_ORDER = 1 THEN fieldB ELSE 0 END DESC
문제는 당신이 UNION
에서 첫 번째 쿼리 (열이 완전히 일치하지 않기 때문에)의 한 부분으로 선택한 세 개의 행에 대한 중복을해야한다는 것입니다.
대신 SELECT
개의 문장을 사용할 수 있습니까? 사용자는 고정 된 결과로서 상기 제 SELECT
를 선언 할 수
보기 [UNION 구문 (http://dev.mysql.com/doc/refman/5.0/en/union.html) . '개별 SELECT 문에 대한 ORDER BY 사용은'순서에 대해 아무런 의미가 없음 '을 찾으십시오. 또한 [이 SO 게시물] (http://stackoverflow.com/questions/3163503/sorting-union-queries-in-mysql/3163526#3163526)을 참조하십시오. – Mike
와우, 효과가 있었지만 어떻게 작동할까요? 음 .. 조금 혼란 스럽네 ..! – stighy