2013-11-04 4 views
6

나는 3 개의 열만있는 테이블을 가지고 있습니다. 나는 다음과 같은 쿼리이 MySQL 쿼리가 올바른 이유는 무엇입니까?

select * from MyTable order by 5 and 2; 

를 입력 할 때 나는 (결과는 select * from MyTable;의 그것과 동일) 테이블에서 모든 것을 얻을. 내가 원래 기대 한 것은 내가 어떤 종류의 오류를 범할 것이라는 것이다. 그러나 나는 그것을 얻지 않았다, 왜?

+0

열 순서가 변경 될 수 있으므로이 값을 사용하는 것이 좋습니다. –

+0

답변은 "알 수 없습니다!" 그러나 ORDER BY 절이 단순히 무시되는 것처럼 AND가 사용되는 것처럼 보인다. – Strawberry

+0

@Strawberry 내가 잘못 생각할 수도 있지만, 생각합니다. –

답변

2

여기서 일어나는 것은 5 and 2이 1로 평가되는 식으로 간주된다는 것입니다. 그러나 첫 번째 열로 결과를 정렬해서는 안됩니다.

사실, 정렬 된 순서로 삽입 했으므로 정렬 된 데이터 만 가져 오는 것 같습니다. 이 SQLFiddle에서보세요 : 데이터가 any of the columns으로 분류되지

http://sqlfiddle.com/#!2/3e04e/1

를, 그것은 value 1으로 분류되고있다.

+0

이 경우가 아니라고 생각합니다. select * from my_tab order 500으로; 그리고 그것은 당신에게 오류를 줄 것입니다 –

+0

@MatteoTassinari 틀렸어 ..당신이 500 명을 말할 때, 정렬이 이루어져야하는 기둥의 위치로 취급됩니다. 5와 2를 말할 때, ** 정렬은 식 **에 의해 반환 된 값에 의해 수행됩니다. 예 :'TIME' 칼럼을 가지고 있다면,'ORDER BY hour (time_col)'로 정렬 할 수 있습니다. –

+0

+1 당신은 맞습니다 –

1

5와 2는 열 인덱스이며 5 번째 열과 2 번째 열을 의미합니다.

+0

그러나 반환 된 데이터는 첫 번째 열에 정렬됩니다. 이 현상을 설명하는 방법? – Brian

0
select * from MyTable order by 5,2; 
It means start with index 5 and bring 2record i.e 5,6,7 
+0

그러나 MyTable에는 3 열만 있습니다. 즉, 5 번째, 6 번째 및 7 번째 열이 존재하지 않는다는 의미입니다. 왜 내가 오류 메시지를받지 못했을까요? – Brian

+0

숫자 열 (열 번호)을 순서대로 사용하면 열 번호가 0 인 경우 오류가 발생하지 않습니다. 존재하지 않는다. 주어진 열 이름이없는 경우에만 오류를 통해. –

+0

숫자 값 (열 번호)을 기준으로 정렬하면 아무런 열 번호도 없을 때 오류가 반환되지 않습니다. 존재하지 않습니다. 주어진 열 이름이없는 경우에만 오류를 통해. 그래서 MyTable에서 5,2를 선택하십시오. 잘 작동하지만 non_existing_column_name에 의해 MyTable 순서에서 select *; 오류를 통해 것입니다. –

6

order by 5 and 2 일정한 표현 따라서 실제 순서가 완료되지 않은 데이터는 단순히 삽입 된 순서로 도시되어있다 order by (5 and 2)로 해석된다.

+0

그 다음에 그는 5 대신에 콤마를 사용해야하고 그 다음에는 2를 써야합니다. –

+1

나는 그것을 이해한다고 생각합니다. == (1 AND 1) == 1. 답장을 보내 주셔서 감사합니다 :) – Brian

+0

@lyen이 경우가 아니라 데이터가 값 1로 정렬됩니다. 첫 번째 열의 값 - 내 대답과 내가 제공 한 SQLFiddle 예제를 확인하십시오. –

관련 문제