2010-08-20 2 views
1

좋습니다. 마지막으로 null 값을 입력해야합니다. 쿼리는 Oracle 및 MySQL에서 실행해야합니다.은 SQL에서 설계 상 큰 값이되었습니다.

나는 이미 내가 서브 쿼리는이 값이 여기에 너무 못생긴 결정하기 위해 생각

ORDER BY 

    CASE WHEN some_table.ord IS NULL THEN 9999999999 ELSE some_table.ord END 

내가 값> 최대 (some_table.ord)를 사용한다 대신 9999999999.

내놓았다했습니다.

이것이 C++ 인 경우이 목적으로 INT_MAX와 같은 매크로를 사용할 수 있습니다. 교차 DBMS SQL 쌍둥이의 이름을 지정할 수 있습니까? 내가 대신 9999999999의 .. 아름다운 무언가를 넣을 수있는 경우 해당 쿼리는 오라클과 MySQL의에서 모두 작동 할 수 있도록

UPDATE

문제는,,,

오라클에서하지 how to put null values last

답변

5

가 널 플래그에 대한 여분의 열을 사용하여입니다 :

order by 
    case when some_table.ord is null then 2 else 1 end , 
    some_table.ord 

또는,이 칼럼이 무엇보다 큰 수, 단지 하드 코드를 취할 수있는 값의 충분한 지식이있는 경우 :

order by coalesce(some_table.ord, 9999999999) 
+0

에서 사용할 수 없습니다. 병합 성은 사례 성명보다 더 좋거나 더 나쁜 성능입니까? 웬일인지 나는 더 좋은 사례 진술에 의지한다. – ErikE

+0

@Emtucifor - 저는 CASE()와 COALESCE() 사이의 차이점에 따라 살고 싶지 않습니다. CASE()는 하드 코딩 된 최대 값을 요구하지 않는 장점이 있지만 더 많은 입력이 필요합니다. – APC

+0

@APC - 나는 적은 타이핑 (모두 나를 믿어. 나는 이것에 대해 애 태우다.)이지만, 성능에 영향이 있다면 조금이라도 타이핑해야하는지는별로 신경 쓰지 않는다. – ErikE

4

입니다 단순히

ORDER BY some_table.ord NULLS LAST 
+0

불행히도이 내용은 MySQL – Thilo

0

다음과 같은 뭔가가 작동하지 않을 수 있습니다를 :

SELECT S.VAL1, S.VAL2, S.VAL3, COALESCE(S.ORD, O.MAX_ORD+1) AS ORD 
    FROM SOME_TABLE S, 
     (SELECT MAX(ORDER) AS MAX_ORD FROM SOME_TABLE) O 
    WHERE S.whatever = whichever AND 
     S.something <> something_else 
    ORDER BY ORD 

MySQL이 FROM 목록에서 하위 쿼리를 허용하는지 확실하지 않습니다. 여기에있는 아이디어는 NULL 값을 처리하기 위해 마법 값을 사용하지 않는 것입니다.

공유하고 즐기십시오.

+0

max를 쿼리 할 필요가 없습니다. 이는 성능에 영향을줍니다. Thilo의 기술을 사용하십시오. – ErikE

관련 문제