Difference between revisions of "Tab.Combine"

From SunFlurry wiki
Jump to: navigation, search
1>Admin
m (1 revision imported)
 
(No difference)

Latest revision as of 11:33, 25 April 2023

  RemoveLocated (Объединение таблиц)
Объект:Таблица
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Неверное имя столбца, невозможно превратить в число, строку
Визуальность:Нет

Функция выполняет операцию объединения, заданную вторым аргументом, над текущей таблицей и таблицей, заданной первым аргументом. Результат операции сохраняется в текущей таблице. Аргегаьных операций не выполняется. Функцией удобно пользоваться, когда нет необходимости выполнять аргегатные операции, она проще и быстрее чем функции группы Join. При добавлении строк в исходную таблицу из второй, в новые строки копируются все столбцы второй таблицы с наименованиями, совпадающими с исходной.
Разница между функциями объединения таблиц:

  1. Group: Функция уменьшает количество строк, оставляя в таблице только уникальные строки, столбцы не являющиеся столбцами группировки и столбцами агрегации удаляются из таблицы. Действие функции подобно действию функции InnerJoin, когда происходит объединение одной и той же таблицы, однако столбцы этой таблицы не удаляются. Количество строк в таблице уменьшается или остается прежним, количество столбцов в таблице уменьшается или остается прежним.
  2. InnerJoin: Функция оставляет в таблице только уникальные строки, входящие одновременно в обе таблицы. Количество строк в таблице уменьшается или остается прежним, количество столбцов в таблице остается прежним. Для столбцов, не входящих в список агрегации используется операция FIRST2.
  3. LeftOuterJoin: Функция производит операции агрегации только над строками, входящими одновременно в обе таблицы. Количество строк в таблице остается прежним, количество столбцов в таблице остается прежним.
  4. FullOuterJoin: Функция производит операции агрегации только над строками, входящими одновременно в обе таблицы и добавляет уникальные строки второй таблицы, которые отсутствовали в первой таблице. Количество строк в таблице остается прежним или увеличивается, количество столбцов в таблице остается прежним. Для столбцов, не входящих в список агрегации в добавляемых строках, используется операция FIRST2.
  5. Combine: Функция производит заданные операции (AND, ADD, XOR, SUB) над исходной таблицей с помощью второй таблицы. В отличие от функций, группы join, функция не выполняет аргегации. Добавляемые строки копируются из второй таблицы со столбцами с наименованиями, совпадающими с исходной.

Синтаксис

Tab.Combine(<Таблица для выполнения операции (TAB)>,<Наименования или индексы столбцов для сравнения (STRING)>,<Тип операции (STRING)>="ADD",<Таблица сортирована по столбцам поиска (INT)>=0)

Аргументы

  • <Таблица для выполнения операции (TAB)> - Объект типа Таблица, с помощью которого будет выполнена операция.
  • <Наименования или индексы столбцов для сравнения (STRING)> - Строка с наименованиями или индексами столбцов исходной таблицы, которые будут использоваться для сравнения значений исходной и второй таблиц. Вторая таблица должна содержать все столбцы с такими же наименованиями, которые адресуются в исходной таблице этим аргументом.
  • <Тип операции (STRING)> - (необязательный аргумент) Тип выполняемой операции. Возможны следующие значения:
    • AND: Конъюнкция двух таблиц. Результат будет содержать таблицу, значения столбцов поиска которой входили одновременно в исходную и во вторую таблицы. Дублирующиеся строки исходной таблицы будут сохранены, если строка нашлась во второй таблице.
    • OR, ADD: Дизъюнкция двух таблиц (по умолчанию) (логическое сложение). Результат будет содержать таблицу, значения столбцов поиска которой входили либо в исходную, либо во вторую таблицу. В результат не добавляются дубли из второй таблицы. Если дубли не имеют значения, быстрее воспользоваться функцией CopyTo.
    • XOR: Неэквивалентность двух таблиц. Результат будет содержать таблицу, значения столбцов поиска которой входили либо в исходную, либо во вторую таблицу, но не одновременно в обе.
    • SUB: Логическое вычитание двух таблиц. Соответствует операции <Аргумент 1> XOR (<Аргумент 1> AND <Аргумент 2>). Результат будет содержать таблицу, значения столбцов поиска которой входили в первую таблицу, но не входили во вторую таблицу.
  • <Таблица сортирована по столбцам поиска (INT)> - (необязательный аргумент) Признак того, что таблица уже сортирована по всем столбцам поиска по неубыванию (по умолчанию 0). Если таблица сортирована, системе не потребуется сортировать ее перед выполнением операции, тем самым увеличивая скорость выполнения функции. Нужно также заметить, что даже если система сортирует таблицу перед операцией, в результирующей таблице эта виртуальная сортировка будет отсутствовать.

Примеры


  Function ВывестиТаблицу(aTab,Тип)
    Message("");
    Message("Демонстрация операции "+Тип+":");
    aTab.Select();
    While aTab.Next() Do
      Message(""+aTab.C1+", "+aTab.C2+", "+aTab.C3);
    EndDo;
  EndFunction

aTab:=Tab.Create("C1,C2,C3");
aTab.AddLine("C1,C2,C3","AB",0,"A");
aTab.AddLine("C1,C2,C3",0,0,"B");
aTab.AddLine("C1,C2,C3",0,0,"C");
aTab.AddLine("C1,C2,C3",1,1,"D");
aTab.AddLine("C1,C2,C3",2,1,"E");
aTab.AddLine("C1,C2,C3",3,1,"F");
aTab.AddLine("C1,C2,C3",4,1,"G");
aTab.AddLine("C1,C2,C3","BA",2,"H");
aTab.AddLine("C1,C2,C3","ABC",0,"I");
aTab.AddLine("C1,C2,C3","BA",2,"J");
aTab.AddLine("C1,C2,C3",7,0,"K");
aTab.AddLine("C1,C2,C3",2,0,"L");
aTab.AddLine("C1,C2,C3",2.5,0,"M");

bTab:=Tab.Create("C1,C2,C3");
bTab.AddLine("C1,C2,C3",1,0,"A");
bTab.AddLine("C1,C2,C3",1,0,"A");
bTab.AddLine("C1,C2,C3",0,0,"A");
bTab.AddLine("C1,C2,C3",2,1,"A");
bTab.AddLine("C1,C2,C3",5,1,"A");
bTab.AddLine("C1,C2,C3",4,1,"A");
bTab.AddLine("C1,C2,C3","BAD",1,"A");
bTab.AddLine("C1,C2,C3","ABC",2,"B");
bTab.AddLine("C1,C2,C3","AB",0,"A");
bTab.AddLine("C1,C2,C3",2.5,2,"A");
bTab.AddLine("C1,C2,C3",2,0,"A");
bTab.AddLine("C1,C2,C3",1.5,0,"A");
bTab.AddLine("C1,C2,C3",1.5,0,"A");

//Демонстрация операции ADD:
//AB, 0, A
//0, 0, B
//0, 0, C
//1, 1, D
//2, 1, E
//3, 1, F
//4, 1, G
//BA, 2, H
//ABC, 0, I
//BA, 2, J
//7, 0, K
//2, 0, L
//2.5, 0, M
//1, 0, A
//5, 1, A
//BAD, 1, A
//ABC, 2, B
//2.5, 2, A
//1.5, 0, A
cTab:=aTab.Copy();
cTab.Combine(bTab,"C1,C2","ADD");
ВывестиТаблицу(cTab,"ADD");

//Демонстрация операции AND:
//AB, 0, A
//0, 0, B
//0, 0, C
//2, 1, E
//4, 1, G
//2, 0, L
cTab:=aTab.Copy();
cTab.Combine(bTab,"C1,C2","AND");
ВывестиТаблицу(cTab,"AND");

//Демонстрация операции "XOR":
//1, 1, D
//3, 1, F
//BA, 2, H
//ABC, 0, I
//BA, 2, J
//7, 0, K
//2.5, 0, M
//1, 0, A
//1, 0, A
//5, 1, A
//BAD, 1, A
//ABC, 2, B
//2.5, 2, A
//1.5, 0, A
//1.5, 0, A
cTab:=aTab.Copy();
cTab.Combine(bTab,"C1,C2","XOR");
ВывестиТаблицу(cTab,"XOR");

//Демонстрация операции "SUB":
//1, 1, D
//3, 1, F
//BA, 2, H
//ABC, 0, I
//BA, 2, J
//7, 0, K
//2.5, 0, M
cTab:=aTab.Copy();
cTab.Combine(bTab,"C1,C2","SUB");
ВывестиТаблицу(cTab,"SUB");