Ключевые слова LEFT и RIGHT в ECL
Я новичок в ECL и не могу понять ключевые слова RIGHT и LEFT (используемые в DEDUP, GROUP и других функциях). Как они работают? В справочном руководстве ECL есть один параграф о том, что он должен делать.
например, что он делает в этом коде?
MyRec := RECORD
STRING1 Value1;
STRING1 Value2;
END;
SomeFile := DATASET([{'C','G'},
{'C','C'},
{'A','X'},
{'B','G'},
{'A','B'}], MyRec);
Dedup2 := DEDUP(Val2Sort, LEFT.Value2 = RIGHT.Value2);
3 ответа
LEFT и RIGHT — это стандартное соглашение об именах в ECL при работе с двумя наборами записей одновременно. С такими операторами, как DEDUP, ROLLUP и ITERATE, LEFT и RIGHT относятся к парам записей в одном и том же наборе записей, LEFT — это первая запись в паре, а RIGHT — вторая.
В операторе JOIN LEFT и RIGHT могут быть разными наборами записей. Когда вы изучаете ECL, язык имеет мощные функции преобразования данных, удачно названные функциями TRANSFORM. В этих функциях вы увидите еще одно ключевое слово SELF , которое представляет результат любого преобразования.
Таким образом, в типичном JOIN вы можете одновременно иметь в памяти «левую», «правую» и «самостоятельную» запись. Таким образом, ключевые слова помогают компилятору отличить , на какое поле в записи вы ссылаетесь, когда имя поля совпадает (например, поле «адрес»).
Очевидно, проблема была в том, как я видел данные. Я отформатировал НАБОР ДАННЫХ как столбец, чтобы его было легче понять, и в итоге испортил мой просмотр. LEFT и RIGHT - это каждый реестр в DATASET, который должен выглядеть следующим образом:
DATASET([{'C','G'},{'C','C'},{'A','X'},{'B','G'},{'A','B'}])
Таким образом, на первой итерации {'C','G'} (LEFT) будут сравниваться с {'C','C'} (RIGHT) и так далее.
Все ключевые слова RIGHT и LEFT в этом контексте указывают, какой набор данных вы хотите справа и слева. В другом контексте в ECL это может означать, что вы хотите сохранить данные СПРАВА или СЛЕВА после выполнения процедуры.
Не здесь.