Q : 외부 선택을 수행 할 때 내부 선택 순서를 저장하는 방법이 있습니까?
A : 외부 쿼리에 ORDER BY 절이 없으면 MySQL은 임의의 순서로 행을 반환 할 수 있습니다.
인라인보기 (파생 테이블)의 행을 특정 순서로 반환하려면 외부 쿼리에서 외부 쿼리에 ORDER BY
절을 추가해야한다고 지정해야합니다.
참고 : 조회에서와 같이 사용자 정의 변수의 동작은 MySQL을 참조 설명서이 경고, 보장 없습니다. 그러나 경고에도 불구하고 MySQL 5.1과 5.5에서 반복적 인 동작을 관찰합니다.
예를 들어, 인라인보기 (예 : 파생 테이블, MySQL venacular)가 필요한 이유는 분명하지 않습니다. 오히려 별도의 SET 문보다
SET @i = 0 ;
SELECT @i:[email protected]+1 AS i
, b.*
FROM booking b
ORDER BY b.cost DESC ;
또는 단일 문에서이 작업을 수행 할 수 있으며, 쿼리 내에서 @i
를 초기화 :이 쿼리는 당신이 원하는 것처럼 보이는 결과를 반환하는 것처럼
는 것 같습니다.
SELECT @i:[email protected]+1 AS i
, b.*
FROM booking b
JOIN (SELECT @i:=0) i
ORDER BY b.cost DESC
(이 초기화는 MySQL은 인라인 뷰를 처리하는 방식 때문에이 동작을 보장 할 수 없습니다. 인라인 뷰 쿼리는 외부 쿼리하기 전에 실행, 다시 작동하고, (향후 릴리스에서 변경 될 수 있습니다 이미 주
) 5.6에서 변경 될 수 있습니다 :이 쿼리의 성능 향상을 위해 적절한 인덱스 선두 컬럼으로 cost
에 사용할 수있는 경우, 예를 들어
MySQL이 그 인덱스를 사용할 수 있습니다
... ON booking (cost)
행을 순서대로 반환하고 av oid a "파일 사용"작업.
"로우 소스에서 행 순서 유지"를 제공하는 MySQL 구문을 인식하지 못합니다. 나는 아무 것도 있다고 생각하지 않는다. 특정 시퀀스에 행이 필요하면'ORDER BY' 절을 사용하십시오. 바깥 쪽 쿼리에서'ORDER BY selected_booking.cost DESC'에 대한 속기가 있는지 물어 보는 것처럼 보입니다. 그리고 그보다 더 짧습니다. (더 짧게 만드는 유일한 방법은 인라인 뷰/파생 테이블에 * 별칭 *을 사용하는 것입니다.) – spencer7593