내 쿼리가 예상보다 다른 순서로 항목을 반환하는 이유를 이해하려고합니다. 내 질문은 : 나는 autoid 다음, 상단에 printjobid와 함께, 그것은 나에게 3 개 행을 줄 것으로 기대하고있다오라클 유니온이 잘못된 순서로 표시됩니다.
SELECT 'PRINTJOBID', MAX(PRINTJOBID), null, null FROM PRINTJOB
UNION
SELECT 'AUTOID', null, MAX(AUTOID), null FROM PRINTJOBSHELLS
UNION
SELECT 'PROCESSLOGID', null, null, MAX(PROCESSLOGID) FROM PROCESSLOG;
하고 하단에 processlogid해야합니다. 내가 쿼리를 실행할 때, 나는 다음과 같이 하단에있는 중간에 printjobid 상단에 autoid, 및 processlog을 얻을 :
AUTOID 널 771426 널
PRINTJOBID 76401 NULL, NULL
PROCESSLOGID 널 널 1,218,693
잘못된 순서로 된 유니온에 대한 인터넷 검색을 시도 했으므로 나는 그 질문에 대한 검색을 시도했습니다. 나는 관련있는 것으로 보이는 것을 보지 못했습니다. UNION이 어떻게 작동하는지 이해하고 있습니까? 쿼리가 select 문을 넣은 순서로 행을 반환한다고 생각했습니다. 고맙습니다!
- 아니, 전혀. 결과 순서는 지정하지 않으면 지정되지 않습니다. 똑같은 데이터 세트를 정확히 두 번 연속 실행하면 데이터베이스 엔진이 쿼리를 병렬로 실행하기로 결정하고 CPU 중 하나가 다른 작업으로 인해 바쁠 경우와 같이 다른 순서로 레코드를 반환 할 수 있습니다. 성명서 끝에 ORDER BY가 없으면 어떤 명령을 의지 할 수 없습니다. – Quassnoi
나는 그것을 지워 줘서 고맙다. ORDER BY를 자주 사용해야 할 것입니다. – carrizal