outerjoin

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

Синтаксис

C = outerjoin(A,B)
C = outerjoin(A,B,Name,Value)
[C,ia,ib] = outerjoin(___)

Описание

пример

C = outerjoin(A,B) составляет таблицу или расписание, C, как внешнее соединение между A и B совпадением строк с помощью всех переменных с теми же именами как ключевые переменные. Например, если A имеет переменные под названием X, Y и Z, и B имеет переменные W, X и Y, то C=outerjoin(A,B) использует X и Y как ключевые переменные.

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

  • Если A является таблицей, то B должен быть таблицей. outerjoin возвращает C как таблицу.

  • Если A является расписанием, то B может быть или таблицей или расписанием. outerjoin возвращает C как расписание для любой комбинации входных параметров.

Внешнее соединение включает строки, которые соответствуют между A и B, и также несопоставленными строками или от A или от B, всех относительно ключевых переменных. C содержит все переменные и от A и от B, включая ключевые переменные.

Векторы меток строки A и B могут быть ключевыми переменными. Метки строки являются именами строки таблицы, или времена строки расписания.

пример

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

пример

[C,ia,ib] = outerjoin(___) также возвращает индексные векторы, ia и ib, указывая на соответствие между строками в C и теми в A и B соответственно. Можно использовать этот синтаксис с любым из входных параметров в предыдущих синтаксисах.

Примеры

свернуть все

Составьте таблицу, A.

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

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

Составьте таблицу, B, с одной переменной вместе с A, названным FavoriteFood.

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

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

Используйте функцию outerjoin, чтобы составить новую таблицу, C, с данными из таблиц A и B.

C = outerjoin(A,B)
C=7×5 table
    Age    FavoriteFood_A    FavoriteFood_B    Calories    NutritionGrade
    ___    ______________    ______________    ________    ______________

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

Таблица C содержит отдельную переменную для ключевой переменной из A, названного FavoriteFood_A и ключевой переменной из B, названного FavoriteFood_B.

Составьте таблицу, A.

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

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

Составьте таблицу, B, с общими ценностями в переменной Key1 между таблицами A и B, но также и содержащий строки со значениями Key1, не существующего в A.

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

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

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

C = outerjoin(A,B,'MergeKeys',true)
C=6×3 table
    Key1    Var1    Var2
    ____    ____    ____

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

Переменные в таблице C, которая прибыла из A, содержат нулевые значения в строках, которые не имеют никакого соответствия от B. Точно так же переменные в C, который прибыл из B, содержат нулевые значения в тех строках, которые не имели никакого соответствия от A.

Составьте таблицу, A.

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

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

Составьте таблицу, B, с общими ценностями в переменной Key1 между таблицами A и B, но также и содержащий строки со значениями Key1, не существующего в A.

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

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

Используйте функцию outerjoin, чтобы составить новую таблицу, C, с данными из таблиц A и B. Подойдите строки с общими ценностями в ключевой переменной, Key1, но также и сохраните строки, значения ключа которых не имеют соответствия.

Кроме того, возвратите индексные векторы, ia и ib, указывающий на соответствие между строками в C и строками в A и B соответственно.

[C,ia,ib] = outerjoin(A,B)
C=6×4 table
    Key1_A    Var1    Key1_B    Var2
    ______    ____    ______    ____

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

ia = 6×1

     1
     2
     3
     0
     4
     5

ib = 6×1

     1
     2
     0
     3
     4
     0

Индексный ia векторов и ib содержат нули, чтобы указать на строки в таблице C, которые не соответствуют строкам в таблицах A или B, соответственно.

Составьте таблицу, A.

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

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

Составьте таблицу, B, с общими ценностями в переменной Key1 между таблицами A и B, но также и содержащий строки со значениями Key1, не существующего в A.

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

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

Используйте функцию outerjoin, чтобы составить новую таблицу, C, с данными из таблиц A и B. Проигнорируйте строки в B, значения ключа которого не совпадают ни с какими строками в A.

Кроме того, возвратите индексные векторы, ia и ib, указывающий на соответствие между строками в C и строками в A и B соответственно.

[C,ia,ib] = outerjoin(A,B,'Type','left')
C=5×4 table
    Key1_A    Var1    Key1_B    Var2
    ______    ____    ______    ____

     'a'        1      'a'        4 
     'b'        2      'b'        5 
     'c'        3      ''       NaN 
     'e'       11      'e'        7 
     'h'       17      ''       NaN 

ia = 5×1

     1
     2
     3
     4
     5

ib = 5×1

     1
     2
     0
     4
     0

Все значения ia являются ненулевым указанием, что все строки в C имеют соответствующие строки в A.

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

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

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

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

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

Объедините A и B с внешним соединением. C подходит строки с общими временами строки, но также и включает строки, которые не имеют соответствий.

C = outerjoin(A,B)
C=5×3 timetable
    Time     Var1_A    Var1_B
    _____    ______    ______

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

Объедините A и B, но проигнорируйте строки в B, времена строки которого не совпадают ни с какими временами строки в A.

D = outerjoin(A,B,'Type','left')
D=4×3 timetable
    Time     Var1_A    Var1_B
    _____    ______    ______

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

Входные параметры

свернуть все

Входные таблицы, заданные как таблицы или как расписания.

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

false

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

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

true

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

outerjoin создает одну переменную путем слияния значений ключа от A и B, принятия значения от A, где соответствующая строка существует в A и принимающих значениях от B в противном случае.

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

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

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

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

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

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

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

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

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

  • Для левого внешнего соединения C содержит строки, соответствующие значениям ключа в A, которые не совпадают ни с какими значениями в B, но не наоборот.

  • Для правильного внешнего соединения C содержит строки, соответствующие значениям ключа в B, которые не совпадают ни с какими значениями в A, но не наоборот.

По умолчанию outerjoin делает полное внешнее соединение и включает несопоставленные строки и от A и от B.

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

свернуть все

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

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

C содержит горизонтальную конкатенацию A(ia,LeftVars) и B(ib,RightVars), отсортированного по значениям в ключевых переменных. По умолчанию LeftVars состоит из всех переменных A, и RightVars состоит из весь от B. В противном случае LeftVars состоит из переменных, заданных аргументом пары "имя-значение" 'LeftVariables', и RightVars состоит из переменных, заданных аргументом пары "имя-значение" 'RightVariables'.

Можно сохранить дополнительные метаданные, такие как описания, переменные модули, имена переменных и имена строки в таблице. Для получения дополнительной информации смотрите раздел Properties table.

Индексируйте к A, возвращенному как вектор-столбец. Каждый элемент ia идентифицирует строку в таблице A, которая соответствует той строке в выходной таблице, C. Векторный ia содержит нули, чтобы указать на строки в C, которые не соответствуют строкам в A.

Индексируйте к B, возвращенному как вектор-столбец. Каждый элемент ib идентифицирует строку в таблице B, которая соответствует той строке в выходной таблице, C. Векторный ib содержит нули, чтобы указать на строки в C, которые не соответствуют строкам в B.

Больше о

свернуть все

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

Переменная раньше совпадала и комбинировала данные между входными таблицами, A и B.

Советы

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

В целом outerjoin копирует метки строки с входной таблицы A к выходной таблице C.

  • Если A не имеет никаких меток строки, то C не имеет никаких меток строки.

  • Если A имеет метки строки, то outerjoin копирует метки строки с A, чтобы создать метки строки в C.

    • Если вы задаете метки строки и от A и от B как пара ключей, то outerjoin объединяет метки строки от B в метки строки C при необходимости.

    • Если вы задаете метки строки A как ключ, но не задаете метки строки B как соответствующий ключ, то outerjoin создает метки строки по умолчанию в C при необходимости.

    • Если и A и B являются таблицами, но вы не задаете имена строки ни одной входной таблицы как ключ, то outerjoin не создает имена строки в C.

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

Смотрите также

|

Введенный в R2013b