9 Replies Latest reply: Oct 22, 2014 6:46 AM by Eugeny Ilyin RSS

    Left Keep и Right Keep одной таблицы

    Denis Irhin

      Здравствуйте.

       

      Left Keep и Right Keep одной и той же таблицы дают разные результаты.

      Так должно быть?

       

      Спасибо.

        • Re: Left Keep и Right Keep одной таблицы
          Eugeny Ilyin

          День добрый.
          Интересно.

          По логике должно быть столько же записей как в первой таблице.
          left отрабатывает нормально, right спотыкается на пустых записях.

          Скорей всего особенность, чем глюк. Связано с внутренним представлением пустых записей.
          Сделайте так:
          Сначала загрузите две копии одной таблицы, а потом соединяйте хоть слева хоть справа.
          В этом случае все будет логично.

          • Re: Left Keep и Right Keep одной таблицы

            Добрый день.

            Логично.

            KEEP  идет по составному ключу, который тут- суть все поля таблицы. 

            Соответственно если хоть одно поле null, то ключ  не определен.

            Таким образом при left  в первой таблице будут все строки, а во второй только 351 строка, где нет null,

            при right наоборот.

            А так как вторую таблицу мы дропаем, то и получаем при right keep таблицу с 351 строкой, которые без null.

              • Re: Left Keep и Right Keep одной таблицы
                Eugeny Ilyin

                Дмитрий, немного не согласен.

                Если хоть одно поле NULL ключ все равно формируется. Просто внутреннее представление о Нуле во время LOAD и после LOAD не совпадают. Думаю поэтому.
                Иначе подобный результат повторялся бы и на объединении двух резидентных таблиц, которые прошли LOAD без дополнительных операций и только потому идут на вычисление right keep .

                  • Re: Left Keep и Right Keep одной таблицы

                    Евгений, так результат повторяется.

                    "

                    Tab01:

                    LOAD  *

                    FROM 

                    [..\3_qvd\Tab01.qvd]

                    (qvd);

                     

                    STORE Tab01 into [..\3_qvd\Tab01.qvd];

                    NoConcatenate

                    Tab02:

                    LOAD  *

                    Resident Tab01;

                     

                    Inner Keep (Tab02)

                    LOAD *

                    Resident Tab01;

                    "

                    В таблицах соответственно 23476, 351,351 строк. Или я что-то не так понял.

                      • Re: Re: Left Keep и Right Keep одной таблицы
                        Eugeny Ilyin

                        Дмитрий, извиняюсь.
                        Действительно на приведенном примере результат играет, только у меня теперь на левом соединении делает обрезку строк.

                        А вот на тесте как ни крути результат один:

                         

                        tab01:
                        LOAD * INLINE [
                            F1, F2
                            1, AA
                            2 
                              , CC
                            4 
                            5, AA
                        ];
                        
                        tab02:
                        NoConcatenate
                        LOAD * Resident tab01;
                        
                        tab03:
                        Right Keep(tab01) load * Resident tab02;
                        DROP Tables tab01, tab02;
                        
                    • Re: Left Keep и Right Keep одной таблицы
                      Denis Irhin

                      Поясните, пожалуйста, чуть подробнее

                      Имеем Таб1

                      A B

                      1 Null

                      2 Text

                       

                      Какие будут составные ключи Left и Right

                      и по какому алгоритму действует Keep?

                       

                      Спасибо.

                        • Re: Left Keep и Right Keep одной таблицы

                          Left keep:                                                         

                          tab1:                    tab2:

                           

                          A  B                    A  B

                          1  null                 2   text   

                          2  text

                           

                          right keep:

                          tab1:                    tab2:

                           

                          A  B                    A  B

                          2  text                 1  null 

                                                    2   text   

                           

                           

                          inner keep:

                          tab2:                    tab1:

                           

                          A  B                    A  B                        

                          2   text                2  text

                           

                          Ключ: A & B ;

                          Вроде бы так. Правда непонятно, почему set NullValue = '♫' ... NullAsValue;

                          не помогло решить проблему.