exponenta event banner

outerjoin

Внешнее соединение между двумя столиками или расписаниями

Описание

пример

T = outerjoin(Tleft,Tright) создает таблицу или расписание, T, в качестве внешнего соединения Tleft и Tright с использованием ключевых переменных. Все переменные с одинаковыми именами в обеих таблицах являются ключевыми переменными. Внешнее соединение объединяет строки таблицы, где ключевые переменные имеют совпадающие значения, но также включает строки, где ключевые переменные из одной входной таблицы не имеют совпадений в другой входной таблице. Например, если Tleft имеет переменные с именем Key1 и Var1, и Tright имеет переменные Key1 и Var2, то T=outerjoin(Tleft,Tright) использование Key1 в качестве ключевой переменной.

Совпадающие значения ключевых переменных в левой и правой таблицах не должны совпадать. Внешние соединения могут выполнять совпадения «один ко многим» и «многие к одному» между ключевыми переменными двух таблиц. То есть значение, которое встречается один раз в ключевой переменной левой таблицы, может иметь несколько совпадений в правой таблице. Аналогично, значение, которое встречается один раз в ключевой переменной правой таблицы, может иметь несколько совпадений в левой таблице.

Внешние соединения можно выполнять только в определенных комбинациях таблиц и расписаний.

  • Если Tleft является таблицей, то Tright должен быть таблицей. outerjoin прибыль T в виде таблицы.

  • Если Tleft является расписанием, то Tright может быть либо таблицей, либо расписанием. outerjoin прибыль T в качестве графика для любой комбинации входных данных.

Векторы меток строк Tleft и Tright могут быть ключевыми переменными. Метки строк - это имена строк таблицы или время строк расписания.

пример

T = outerjoin(Tleft,Tright,Name,Value) выполняет операцию внешнего соединения с дополнительными опциями, заданными одним или несколькими Name,Value аргументы пары.

пример

[T,ileft,iright] = outerjoin(___) также возвращает векторы индекса, ileft и iright, указывающее соответствие между строками в T и строки в Tleft и Tright соответственно. Этот синтаксис можно использовать с любым из входных аргументов в предыдущих синтаксисах.

Примеры

свернуть все

Создание таблицы, Tleft.

Tleft = table([5;12;23;2;15;6],...
        {'cheerios';'pizza';'salmon';'oreos';'lobster';'pizza'},...
        'VariableNames',{'Age','FavoriteFood'},...
        'RowNames',{'Amy','Bobby','Holly','Harry','Marty','Sally'})
Tleft=6×2 table
             Age    FavoriteFood
             ___    ____________

    Amy       5     {'cheerios'}
    Bobby    12     {'pizza'   }
    Holly    23     {'salmon'  }
    Harry     2     {'oreos'   }
    Marty    15     {'lobster' }
    Sally     6     {'pizza'   }

Создание таблицы, Tright, с одной переменной, общей с Tleft, вызываемый FavoriteFood.

Tright = table({'cheerios';'oreos';'pizza';'salmon';'cake'},...
         [110;160;140;367;243],...
         {'A-';'D';'B';'B';'C-'},...
         'VariableNames',{'FavoriteFood','Calories','NutritionGrade'})
Tright=5×3 table
    FavoriteFood    Calories    NutritionGrade
    ____________    ________    ______________

    {'cheerios'}      110           {'A-'}    
    {'oreos'   }      160           {'D' }    
    {'pizza'   }      140           {'B' }    
    {'salmon'  }      367           {'B' }    
    {'cake'    }      243           {'C-'}    

Используйте outerjoin для создания новой таблицы, T, с данными из таблиц Tleft и Tright.

T = outerjoin(Tleft,Tright)
T=7×5 table
    Age    FavoriteFood_Tleft    FavoriteFood_Tright    Calories    NutritionGrade
    ___    __________________    ___________________    ________    ______________

    NaN       {0x0 char  }          {'cake'    }          243         {'C-'    }  
      5       {'cheerios'}          {'cheerios'}          110         {'A-'    }  
     15       {'lobster' }          {0x0 char  }          NaN         {0x0 char}  
      2       {'oreos'   }          {'oreos'   }          160         {'D'     }  
     12       {'pizza'   }          {'pizza'   }          140         {'B'     }  
      6       {'pizza'   }          {'pizza'   }          140         {'B'     }  
     23       {'salmon'  }          {'salmon'  }          367         {'B'     }  

Стол T содержит отдельную переменную для ключевой переменной из Tleft, вызываемый FavoriteFood_Tleftи ключевой переменной из Tright, вызываемый FavoriteFood_Tright.

Создание таблицы, Tleft.

Tleft = table({'a' 'b' 'c' 'e' 'h'}',[1 2 3 11 17]',...
        'VariableNames',{'Key1' 'Var1'})
Tleft=5×2 table
    Key1     Var1
    _____    ____

    {'a'}      1 
    {'b'}      2 
    {'c'}      3 
    {'e'}     11 
    {'h'}     17 

Создание таблицы, Tright, с общими значениями в переменной Key1 между таблицами Tleft и Tright, но также содержащий строки со значениями Key1 отсутствует в Tleft.

Tright = table({'a','b','d','e'}',[4;5;6;7],...
         'VariableNames',{'Key1' 'Var2'})
Tright=4×2 table
    Key1     Var2
    _____    ____

    {'a'}     4  
    {'b'}     5  
    {'d'}     6  
    {'e'}     7  

Используйте outerjoin для создания новой таблицы, T, с данными из таблиц Tleft и Tright. Объедините ключевые значения в одну переменную в выходной таблице, T.

T = outerjoin(Tleft,Tright,'MergeKeys',true)
T=6×3 table
    Key1     Var1    Var2
    _____    ____    ____

    {'a'}      1       4 
    {'b'}      2       5 
    {'c'}      3     NaN 
    {'d'}    NaN       6 
    {'e'}     11       7 
    {'h'}     17     NaN 

Переменные в таблице T которая произошла от Tleft содержат значения NULL в строках, не совпадающих с Tright. Аналогично, переменные в T которая произошла от Tright содержат значения NULL в строках, не совпадающих с Tleft.

Создание таблицы, Tleft.

Tleft = table({'a' 'b' 'c' 'e' 'h'}',[1 2 3 11 17]',...
        'VariableNames',{'Key1' 'Var1'})
Tleft=5×2 table
    Key1     Var1
    _____    ____

    {'a'}      1 
    {'b'}      2 
    {'c'}      3 
    {'e'}     11 
    {'h'}     17 

Создание таблицы, Tright, с общими значениями в переменной Key1 между таблицами Tleft и Tright, но также содержащий строки со значениями Key1 отсутствует в Tleft.

Tright = table({'a','b','d','e'}',[4;5;6;7],...
         'VariableNames',{'Key1' 'Var2'})
Tright=4×2 table
    Key1     Var2
    _____    ____

    {'a'}     4  
    {'b'}     5  
    {'d'}     6  
    {'e'}     7  

Используйте outerjoin для создания новой таблицы, T, с данными из таблиц Tleft и Tright. Сопоставление строк с общими значениями в ключевой переменной, Key1, но также сохранить строки, ключевые значения которых не совпадают.

Кроме того, векторы возвращаемого индекса, ileft и iright указание соответствия между строками в T и строки в Tleft и Tright соответственно.

[T,ileft,iright] = outerjoin(Tleft,Tright)
T=6×4 table
    Key1_Tleft    Var1    Key1_Tright    Var2
    __________    ____    ___________    ____

    {'a'     }      1     {'a'     }       4 
    {'b'     }      2     {'b'     }       5 
    {'c'     }      3     {0x0 char}     NaN 
    {0x0 char}    NaN     {'d'     }       6 
    {'e'     }     11     {'e'     }       7 
    {'h'     }     17     {0x0 char}     NaN 

ileft = 6×1

     1
     2
     3
     0
     4
     5

iright = 6×1

     1
     2
     0
     3
     4
     0

Векторы индекса ileft и iright содержать нули для обозначения строк в таблице T которые не соответствуют строкам в таблицах Tleft или Trightсоответственно.

Создание таблицы, Tleft.

Tleft = table({'a' 'b' 'c' 'e' 'h'}',[1 2 3 11 17]',...
        'VariableNames',{'Key1' 'Var1'})
Tleft=5×2 table
    Key1     Var1
    _____    ____

    {'a'}      1 
    {'b'}      2 
    {'c'}      3 
    {'e'}     11 
    {'h'}     17 

Создание таблицы, Tright, с общими значениями в переменной Key1 между таблицами Tleft и Tright, но также содержащий строки со значениями Key1 отсутствует в Tleft.

Tright = table({'a','b','d','e'}',[4;5;6;7],...
         'VariableNames',{'Key1' 'Var2'})
Tright=4×2 table
    Key1     Var2
    _____    ____

    {'a'}     4  
    {'b'}     5  
    {'d'}     6  
    {'e'}     7  

Используйте outerjoin для создания новой таблицы, T, с данными из таблиц Tleft и Tright. Игнорировать строки в Tright чьи ключевые значения не совпадают ни с одной строкой в Tleft.

Кроме того, векторы возвращаемого индекса, ileft и iright указание соответствия между строками в T и строки в Tleft и Tright соответственно.

[T,ileft,iright] = outerjoin(Tleft,Tright,'Type','left')
T=5×4 table
    Key1_Tleft    Var1    Key1_Tright    Var2
    __________    ____    ___________    ____

      {'a'}         1     {'a'     }       4 
      {'b'}         2     {'b'     }       5 
      {'c'}         3     {0x0 char}     NaN 
      {'e'}        11     {'e'     }       7 
      {'h'}        17     {0x0 char}     NaN 

ileft = 5×1

     1
     2
     3
     4
     5

iright = 5×1

     1
     2
     0
     4
     0

Все значения ileft ненулевые, указывающие, что все строки в T иметь соответствующие строки в Tleft.

Создайте два расписания, Tleft и Tright. Они имеют некоторые общие времена строк, но каждый также включает в себя время строк, которых нет в другом расписании.

Tleft = timetable(seconds([1;2;4;6]),[1 2 3 11]')
Tleft=4×1 timetable
    Time     Var1
    _____    ____

    1 sec      1 
    2 sec      2 
    4 sec      3 
    6 sec     11 

Tright = timetable(seconds([2;4;6;7]),[4 5 6 7]')
Tright=4×1 timetable
    Time     Var1
    _____    ____

    2 sec     4  
    4 sec     5  
    6 sec     6  
    7 sec     7  

Объединиться Tleft и Tright с внешним соединением. T1 соответствует строкам с общим временем строк, но также включает строки, которые не имеют совпадений.

T1 = outerjoin(Tleft,Tright)
T1=5×2 timetable
    Time     Var1_Tleft    Var1_Tright
    _____    __________    ___________

    1 sec         1            NaN    
    2 sec         2              4    
    4 sec         3              5    
    6 sec        11              6    
    7 sec       NaN              7    

Объединиться Tleft и Tright, но игнорировать строки в Tright чье время строки не совпадает ни с одним временем строки в Tleft.

T2 = outerjoin(Tleft,Tright,'Type','left')
T2=4×2 timetable
    Time     Var1_Tleft    Var1_Tright
    _____    __________    ___________

    1 sec         1            NaN    
    2 sec         2              4    
    4 sec         3              5    
    6 sec        11              6    

Входные аргументы

свернуть все

Левая таблица, заданная как таблица или расписание.

Правая таблица, заданная как таблица или расписание.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'Keys',2 использует вторую переменную в Tleft и вторую переменную в Tright в качестве ключевых переменных.

Переменные для использования в качестве ключей, определяемые как разделенная запятыми пара, состоящая из 'Keys' и положительное целое число, вектор положительных целых чисел, символьный вектор, клеточный массив символьных векторов, строковый массив или логический вектор.

Вы не можете использовать 'Keys' аргумент пары имя-значение с 'LeftKeys' и 'RightKeys' аргументы пары имя-значение.

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

Пример: 'Keys',[1 3] использует первую и третью переменные в Tleft и Tright в качестве ключевых переменных.

Пример: 'Keys',{'X','Y'} использует переменные с именем X и Y в Tleft и Tright в качестве ключевых переменных.

Пример: 'Keys','Row' использует векторы имен строк Tleft и Tright в качестве ключевых переменных, если обе Tleft и Tright таблицы с именами строк.

Переменные для использования в качестве ключей в Tleft, указанная как пара, разделенная запятыми, состоящая из 'LeftKeys' и положительное целое число, вектор положительных целых чисел, символьный вектор, клеточный массив символьных векторов, строковый массив или логический вектор.

Необходимо использовать 'LeftKeys' аргумент пары имя-значение в сочетании с 'RightKeys' аргумент пары имя-значение. 'LeftKeys' и 'RightKeys' оба должны указывать одинаковое количество ключевых переменных. outerjoin парами ключевых значений на основе их порядка.

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

Пример: 'LeftKeys',1 использует только первую переменную в Tleft в качестве ключевой переменной.

Переменные для использования в качестве ключей в Tright, указанная как пара, разделенная запятыми, состоящая из 'RightKeys' и положительное целое число, вектор положительных целых чисел, символьный вектор, клеточный массив символьных векторов, строковый массив или логический вектор.

Необходимо использовать 'RightKeys' аргумент пары имя-значение в сочетании с 'LeftKeys' аргумент пары имя-значение. 'LeftKeys' и 'RightKeys' оба должны указывать одинаковое количество ключевых переменных. outerjoin парами ключевых значений на основе их порядка.

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

Пример: 'RightKeys',3 использует только третью переменную в Tright в качестве ключевой переменной.

Флаг ключей слияния, заданный как пара, разделенная запятыми, состоящая из 'MergeKeys' и либо false, true, 0 или 1.

false

outerjoin включает две отдельные переменные в выходную таблицу, T, для каждой пары ключевых переменных из таблиц Tleft и Tright.

Это поведение является поведением по умолчанию.

true

outerjoin включает одну переменную в выходную таблицу, T, для каждой пары ключевых переменных из таблиц Tleft и Tright.

outerjoin создает одну переменную путем объединения ключевых значений из Tleft и Tright, взяв значения из Tleft где соответствующая строка существует в Tleft, и взятие значений из Tright в противном случае.

  • При указании 'LeftVariables' или 'RightVariables' чтобы включить только один ключ из пары переменных ключей, то outerjoin включает объединенный ключ, содержащий значения из обеих ключевых переменных, в выходную таблицу.

  • При указании 'LeftVariables' и 'RightVariables' чтобы исключить обе клавиши из пары переменных клавиш, outerjoin не включает объединенную ключевую переменную в выходную таблицу.

Переменные из Tleft для включения в T, указанная как пара, разделенная запятыми, состоящая из 'LeftVariables' и положительное целое число, вектор положительных целых чисел, символьный вектор, клеточный массив символьных векторов, строковый массив или логический вектор.

Вы можете использовать 'LeftVariables' включение или исключение ключевых переменных, а также неключевых переменных из выходных данных, T.

По умолчанию outerjoin включает все переменные из Tleft.

Переменные из Tright для включения в T, указанная как пара, разделенная запятыми, состоящая из 'RightVariables' и положительное целое число, вектор положительных целых чисел, символьный вектор, клеточный массив символьных векторов, строковый массив или логический вектор.

Вы можете использовать 'RightVariables' включение или исключение ключевых переменных, а также неключевых переменных из выходных данных, T.

По умолчанию outerjoin включает все переменные из Tright.

Тип операции внешнего соединения, определяемый как разделенная запятыми пара, состоящая из 'Type' и либо 'full' (означает полное внешнее соединение), 'left' (левое внешнее соединение), или 'right' (правое внешнее соединение).

  • Для полного внешнего соединения, T включает все ключевые значения из обеих таблиц, как показано на диаграмме ниже.

  • Для левого внешнего соединения T включает ключевые значения в Tleft которые не соответствуют каким-либо ключевым значениям в Tright, но исключает ключевые значения в Tright которые не соответствуют каким-либо ключевым значениям в Tleft. Например, на диаграмме ниже левое внешнее соединение исключает ключевое значение 7 от правого стола.

  • Для правого внешнего соединения, T включает ключевые значения в Tright которые не соответствуют каким-либо ключевым значениям в Tleft, но исключает ключевые значения в Tleft которые не соответствуют каким-либо ключевым значениям в Tright. Например, на диаграмме ниже правое внешнее соединение исключает ключевое значение 1 от левого стола.

По умолчанию outerjoin выполняет полное внешнее соединение и включает несопоставленные строки из обоих Tleft и Tright.

Выходные аргументы

свернуть все

Внешнее соединение из Tleft и Tright, возвращено в виде таблицы. Выходная таблица, T, содержит одну строку для каждой пары строк в таблицах Tleft и Tright которые имеют одну и ту же комбинацию ключевых значений. Если Tleft и Tright содержат переменные с тем же именем, outerjoin добавляет уникальный суффикс к соответствующим именам переменных в T. Переменные в T которая произошла от Tleft содержат значения NULL в строках, не совпадающих с Tright. Аналогично, переменные в T которая произошла от Tright содержат значения NULL в строках, не совпадающих с Tleft.

В общем, если есть m строки в таблице Tleft и n строки в таблице Tright которые содержат одну и ту же комбинацию значений в ключевых переменных, таблица T содержит m*n строки для этой комбинации. T также содержит строки, соответствующие комбинациям ключевых значений в одной входной таблице, которые не соответствуют ни одной строке другой входной таблицы.

T содержит горизонтальную конкатенацию Tleft(ileft,LeftVars) и Tright(iright,RightVars) отсортировано по значениям в ключевых переменных. По умолчанию LeftVars состоит из всех переменных Tleft, и RightVars состоит из всех переменных из Tright. В противном случае LeftVars состоит из переменных, указанных 'LeftVariables' аргумент пары имя-значение, и RightVars состоит из переменных, указанных 'RightVariables' аргумент пары имя-значение.

В таблице можно хранить дополнительные метаданные, такие как описания, единицы измерения переменных, имена переменных и имена строк. Дополнительные сведения см. в разделе «Свойства» table.

Индекс в Tleft, возвращается в виде вектора столбца. Каждый элемент ileft определяет строку в таблице Tleft которая соответствует этой строке в выходной таблице, T. Вектор ileft содержит нули для обозначения строк в T которые не соответствуют строкам в Tleft.

Индекс в Tright, возвращается в виде вектора столбца. Каждый элемент iright определяет строку в таблице Tright которая соответствует этой строке в выходной таблице, T. Вектор iright содержит нули для обозначения строк в T которые не соответствуют строкам в Tright.

Подробнее

свернуть все

Ключевая переменная

Переменная, используемая для сопоставления и объединения данных между входными таблицами, Tleft и Tright.

Совет

  • Вектор меток строк из входной таблицы или расписания может быть ключом, отдельно или в сочетании с другими ключевыми переменными. Метки строк - это имена строк таблицы или время строк расписания. Чтобы использовать этот вектор в качестве ключа, укажите его как 'Row' (для имен строк таблицы), как имя вектора расписания времени строки или как значение T.Properties.DimensionNames{1}, где T - таблица или расписание.

    В общем, outerjoin копирование меток строк из входной таблицы Tleft в выходную таблицу T.

    • Если Tleft не имеет меток строк, то T не имеет меток строк.

    • Если Tleft имеет метки строк, затем outerjoin копирование меток строк из Tleft для создания меток строк в T.

      • При указании меток строк из обоих Tleft и Tright как пара ключей, то outerjoin объединяет метки строк из Tright в метку строки T там, где это необходимо.

      • Если указаны метки строк Tleft в качестве ключа, но не указывайте метки строк Tright в качестве совпадающего ключа, то outerjoin создает метки строк по умолчанию в T там, где это необходимо.

      • Если оба Tleft и Tright являются таблицами, но вы не указываете ни одно из имен строк входной таблицы в качестве ключа, то outerjoin не создает имена строк в T.

    Нельзя выполнить внешнее соединение с помощью меток строк Tleft в качестве левой клавиши и переменной Tright как правильный ключ. Чтобы выполнить внешнее соединение, преобразуйте метки строк Tleft к табличной переменной и использовать новую табличную переменную в качестве ключа.

Расширенные возможности

Представлен в R2013b