Конференция "Базы" » with .. select в Oracle что-то не работает [D7]
 
  • O'ShinW © (13.02.13 10:53) [0]
    with TAB1 as
    (
    select 1 FLD1, '1' FLD2 from dual
    union
    select 2, '2' from dual
    )
    select * from TAB1

    0 строк выбрано за 0.0016 секунд



    select 1 FLD1, '1' FLD2 from dual
    union
    select 2, '2' from dual



    1 1
    2 2



    SELECT * FROM v$version;



    Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
    PL/SQL Release 11.2.0.3.0 - Production
    CORE 11.2.0.3.0 Production
    TNS for Solaris: Version 11.2.0.3.0 - Production
    NLSRTL Version 11.2.0.3.0 - Production
  • evvcom © (13.02.13 12:01) [1]
    На 11-м нет возможности проверить. На 9-м у меня работает.
    И замечание. Вот вместо того union, когда точно известно, что дубликатов в наборах не будет, использовать надо union all
  • Медвежонок Пятачок © (13.02.13 12:32) [2]
    Работает и на одиннадцатом.

    with tab1 as
    (
    select 0+level
    from dual
    connect by level < 3
    ) select * from tab1
  • Игорь Шевченко © (13.02.13 12:34) [3]
    SQL> with TAB1 as
     2  (
     3  select 1 FLD1, '1' FLD2 from dual
     4  union
     5  select 2, '2' from dual
     6  )
     7  select * from TAB1;


         FLD1 FLD2
    ---------- ----
            1 1
            2 2

    SQL> select banner from v$version;

    BANNER
    --------------------------------------------------------------------------------
    Personal Oracle Database 11g Release 11.2.0.1.0 - Production
    PL/SQL Release 11.2.0.1.0 - Production
    CORE 11.2.0.1.0 Production
    TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production

  • O'ShinW © (13.02.13 12:44) [4]
    >> Медвежонок Пятачок ©   (13.02.13 12:32) [2]
    не-а..
    with tab1 as
    (
    select 0+level
    from dual
    connect by level < 3
    ) select * from tab1


    0 строк выбрано за 0 секунд


    >  вместо того union, когда точно известно, что дубликатов
    > в наборах не будет, использовать надо union all

    это почему?

    когда точно известно, что не будет дубликатов, тогда хватит union
    когда известно, что они могут быть, но не нужны - и тогда хватит union
    а когда могут быть, и нужны, тогда union all


    > Игорь Шевченко ©   (13.02.13 12:34) [3]

    Почти одинаково все
    вообще, печаль.
  • O'ShinW © (13.02.13 12:53) [5]
    блин, только начал было юзать конструкции сии (with .. select)
    Буквально два дня назад обновил, на 9ке Oracle и клиенте 10ом, работало
  • Медвежонок Пятачок © (13.02.13 12:55) [6]
    у меня все работает. В исходном и в моем вариантах.

    Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
  • Игорь Шевченко © (13.02.13 13:12) [7]

    > когда точно известно, что не будет дубликатов, тогда хватит
    > union


    матчасть учить
  • O'ShinW © (13.02.13 14:01) [8]

    > > когда точно известно, что не будет дубликатов, тогда хватит
    > > union
    >
    > матчасть учить

    не понял.

    --пусть есть набор
    select 1 from dual
    union
    select 2 from dual
    union  
    select 3 from dual
    --дубликатов нет. Получаем 1,2,3

    --пусть есть набор
    select 1 from dual
    union
    select 2 from dual
    union  
    select 1 from dual
    --дубликаты есть. Они нам НЕ нужны. Получаем 1,2

    --пусть есть набор
    select 1 from dual
    union
    select 2 from dual
    union  
    select 1 from dual
    --дубликаты есть. Они нам нужны. Получаем 1,2,1

    что не так?
  • O'ShinW © (13.02.13 14:01) [9]
    конечно, так имел ввиду

    > --пусть есть набор
    > select 1 from dual
    > union all
    > select 2 from dual
    > union all
    > select 1 from dual
    > --дубликаты есть. Они нам нужны. Получаем 1,2,1
  • O'ShinW © (13.02.13 14:10) [10]
    думаю, проблема в изначальной постановке.
    Что бы были дубликаты в полученной, окончательной, выборке - union all, да.
    НО, было сказано:
    когда точно известно, что не будет дубликатов
    сам понимаю это как в исходных наборах, подлежащих к объединению, гарантировано нет дубликатов.
  • O'ShinW © (13.02.13 14:11) [11]
    ладно, но не в этом дело :)
    Как этот with заставить заработать то?
  • Игорь Шевченко © (13.02.13 14:17) [12]

    > Как этот with заставить заработать то?


    на металинке уже поискал ?


    > не понял.


    почитай матчасть, отличия union от union all

    http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries004.htm
    http://stackoverflow.com/questions/49925/what-is-the-difference-between-union-and-union-all
  • O'ShinW © (13.02.13 14:29) [13]

    > почитай матчасть, отличия union от union all

    не просто почитал, а уже и по лбу получал.


    > на металинке уже поискал ?

    угу, сейчас смотрю
    Проблема в локальных настройках, похоже
    Не пойму в каких только
  • evvcom © (13.02.13 15:45) [14]

    > а уже и по лбу получал

    Видимо мало получал.

    Если дубликатов точно нет, то зачем нагружать сервер ненужной сортировкой и удалением несуществующих дубликатов?
  • evvcom © (13.02.13 15:46) [15]

    > а уже и по лбу получал

    Видимо мало получал.

    Если дубликатов точно нет, то зачем нагружать сервер ненужной сортировкой и удалением несуществующих дубликатов?
  • evvcom © (13.02.13 15:51) [16]

    > --пусть есть набор
    > select 1 from dual
    > union
    > select 2 from dual
    > union  
    > select 3 from dual
    > --дубликатов нет. Получаем 1,2,3

    а чем это отличается от
    select 1 from dual
    union all
    select 2 from dual
    union all
    select 3 from dual


    знаешь???
  • O'ShinW © (13.02.13 17:36) [17]

    > знаешь???

    да!!! :)
  • O'ShinW © (13.02.13 17:42) [18]

    > зачем нагружать сервер ненужной сортировкой и удалением
    > несуществующих дубликатов?

    Про дубликаты:
    не думаю, что он настолько несообразительный, что будет тратить время на это.

    про сортировку:  
    да, не знал

    Получал же по другой причине,
    когда схлопнулись дубликаты там, где очень маловероятно они могли бы быть.
    Поэтому и запомнил это твердо :)
  • evvcom © (13.02.13 17:46) [19]

    > не думаю, что он настолько несообразительный, что будет
    > тратить время на это

    план запроса всё пояснит, сортировка для того и делается
  • O'ShinW © (14.02.13 08:27) [20]
    похоже что-то намудрил, на своей машинке
    поставил рядом еще один, подключился - все работает
 
Конференция "Базы" » with .. select в Oracle что-то не работает [D7]
Есть новые Нет новых   [119451   +49][b:0][p:0.002]