문제

내 결과 세트가 a 먼저 b 초? 까다로운 주문 문제를 해결하는 데 도움이 될 것입니다.

다음은 내가하고있는 일의 단순화 된 예입니다.

SELECT a FROM A LIMIT 1 
UNION 
SELECT b FROM B LIMIT 1;
도움이 되었습니까?

해결책

SELECT col
FROM 
   (
       SELECT a col, 0 ordinal FROM A LIMIT 1
       UNION ALL
       SELECT b, 1 FROM B LIMIT 1
   ) t
ORDER BY ordinal

다른 팁

나는 적어도 모든 DBM에서 주문이 보장되지 않는다고 생각합니다.

노조의 질서를 통제하기 위해 과거에 한 일은 다음과 같습니다.

(SELECT a, 0 AS Foo FROM A LIMIT 1)
UNION
(SELECT b, 1 AS Foo FROM B LIMIT 1)
ORDER BY Foo

결과 세트 UNION 뚜렷한 값을 제거합니다.

문서에서 증거를 찾을 수는 없지만 10 몇 년 동안 나는 그것을 말할 수 있습니다 UNION ALL 적어도 질서를 보존합니다 Oracle.

그러나 원자력 발전소를 건설하는 경우 이에 의존하지 마십시오.

아니요, SQL 쿼리의 결과 순서가 제어됩니다. 절차에 의해 절에 의해. 어떤 상황에서는 절 순서없이 순서 대상 결과를 볼 수 있지만 우연히 (예 : 최적화의 현재 쿼리 계획의 부작용) 보장되지는 않습니다.

까다로운 주문 문제는 무엇입니까?

나는 Oracle에게 주문없이 먼저 나올 방법이 없다는 것을 알고 있습니다. 문제는 시도해 보면 대부분의 시간에도 올바른 순서로 나올 수 있다는 것입니다. 그러나 생산에 의존하자마자 잘못 될 것입니다.

데이터베이스가 노조에 따라 주문을해야 할 가능성이 높기 때문에 나는 생각하지 않았을 것입니다.

연합은 모두 다르게 행동 할 수 있지만 ymmv.

짧은 대답은 그렇습니다. 그때 B를 얻을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top