2012-10-31 3 views
2

만약 내가 같은 MySQL의 쿼리IN을 LIMIT와 함께 사용할 때 랜덤하게 출력됩니까?

SELECT * FROM table1 WHERE id IN(1,2,3,4) LIMIT 2 

테이블에서 1,2,3,4에서 ID 1, 2 또는 2 명 임의의 ID의로 행을 반환에는 mysql 것인가?

+1

내가 MySQL을 말하지만에 없습니다 * 가장 * SQL 제품, 주문, 시스템은 무료입니다 * 당신은 * 정의하지 않는 경우 가장 편리한 순서로 결과를 반환하십시오. 따라서 원하는 순서를 지정 *하는 것이 좋은 습관입니다. –

답변

0

IN에있는 처음 두 레코드를 반환하지만 order by을 지정하지 않으면 순서가 보장되지 않습니다. 번호가 고정되어 있습니다 (귀하의 IN 절 (< =)에서 일치하는 숫자는 LIMIT 절에 지정된 숫자입니다), 주문하지 않습니다. 이제 일반적으로는 "주요"테이블

ID 

1 
3 
2 
4 

이 쿼리

select * from main where id in (1,2,3,4) limit 2 

반환

1 
3 

값이 table.It에 얼마나 그게 전부가 순서대로가 반환하기 때문에 말할 수 있습니다 데이터가 저장됩니다 (일반적인 MySQL 시나리오에서). 주문이됩니다

select * from main where id in (1,2,3,4) order by id limit 2 

반환

1 
2 
1

테이블 구조, 레코드 순서 및 인덱스를 모르므로 최종 결과를 예측할 수 없습니다.

그러나이 정확한 쿼리의 경우, 이상한 스토리지 엔진이 없으면 재미있는 임의의 myslq 엔진이 아니라 항상 결과 집합의 처음 두 레코드가됩니다. 테이블 구조 또는 레코드를 변경하지 않는 한 결과 세트는 항상 동일해야합니다. 쿼리 최적화 프로그램은 인덱스가 변경되거나 해당 인덱스의 상대적인 카디널리티가 변경되지 않는 한 항상 계획하고 실행합니다.

0

사용자가 지정한 간격 내에서 ID를 사용하여 찾은 처음 두 레코드를 반환합니다. 을 지정하지 않으면 항목을 특정 순서로 가져올 수 있다고 보장 할 수 없습니다.

관련 문제