Есть две таблицы с одинаковыми ключами как их объеденить без дублей при помощи запроса

таблица1
НомерСТроки Текст
1 Тест1
2 тест2
2 Тест3
3 Тест4
1 Тест5

таблица2
НомерСТроки Текст2
2 Результат1
1 Результат2
3 Результат3
1 Результат4
2 Результат5

Итог
НомерСТроки Текст Текст2
1 Тест1 Результат2
2 тест2 Результат1
2 Тест3 Результат5
3 Тест4 Результат3
1 Тест5 Результат4
---
Сортировать можно во вложенном запросе, если указать Первые ххх
ВЫБРАТЬ
 Т1.Номер КАК Номер,
 Т1.Поле1 КАК Поле1,
 АВТОНОМЕРЗАПИСИ() КАК ПолеСвязи
Поместить ТТ1
ИЗ
 (ВЫБРАТЬ ПЕРВЫЕ 100000
  Т1.Номер КАК Номер,
  Т1.Поле1 КАК Поле1
 ИЗ
  Т1 КАК Т1

 УПОРЯДОЧИТЬ ПО
  Номер) КАК Т1
---
Ответ в {10} и {16}. Сортировать во временных таблицах можно и даже нумеровать по группам, но в 1С не сразу.
Решение ниже не полное. Оно не учитывает, что делать если элементов будет не равное количество по каждому номеру. Но что делать в этом случае, собственно и в задании нет. :-)
Поэтому ничего не делал.
---
Почему в результирующей таблице нет "2 тест2 Результат5", например?
---
так как Результат5 должен быть только 1 раз
---
2 тест2 Результат5
такой вариант допустим, но тогда должен быть 2 Тест3 Результат1
---
Хорошо, а как ВЫ выбираете между:
2 Тест2 Результат5, 2 Тест3 Результат1
и
2 Тест2 Результат1, 2 Тест3 Результат5
---
нету разницы что оставить, какую первую запись выбирет ту можем и оставлять
---
Если количество строк таблиц всегда одинаково, и количество строк с одинаковыми значениями в поле НомерСтроки совпадает, то решается так:
1) сортируем таблицу1 по полю НомерСтроки, добавляем поле АВТОНОМЕРЗАПИСИ() КАК НомерДляСвязи
2) сортируем таблицу2 по полю НомерСтроки, добавляем поле АВТОНОМЕРЗАПИСИ() КАК НомерДляСвязи
3) соединяем таблицы по полю НомерДляСвязи.
---
первое о чём подумал, но сортировать во временных таблицых нельзя
---
Отсортировать до запроса?
---
никак, это же я для примера такие простые иаблицы взял, а по факту это выборки из базы
---
Сортировать можно во вложенном запросе, если указать Первые ххх
ВЫБРАТЬ
 Т1.Номер КАК Номер,
 Т1.Поле1 КАК Поле1,
 АВТОНОМЕРЗАПИСИ() КАК ПолеСвязи
Поместить ТТ1
ИЗ
 (ВЫБРАТЬ ПЕРВЫЕ 100000
  Т1.Номер КАК Номер,
  Т1.Поле1 КАК Поле1
 ИЗ
  Т1 КАК Т1

 УПОРЯДОЧИТЬ ПО
  Номер) КАК Т1
---
Спасибо, не знал что так можно
---
какая вероятность, что НомерДляСвязи в обоих таблицах будет начинаться одинаково?
---
В задании не указано, что делать в таком случае. Автор сам до формулирует и допилит. Суть алгоритма в {10} верная. В {23} тоже самое, но на данных из условия {1} и показанным результатом работы.
---
Если субд не пострге, то начинается с 1.
Но для надежности можно привести в запросе - найти минимальный номер поля НомерДляСвязи, поместить в отдельную таблицу в поле МинНомер, соединиться с этой таблицей, и вычислять НомерДляСвязи как НомерДляСвязи - МинНомер + 1 - и будет начинаться с 1.
То есть при небольшом усилии, вероятность = 1.
---
Да.
(24) Именно это в {23}. Просто в 1С это через.... не удобно, в общем. Поэтому нарисовал как короче и удобнее без 1С. Но суть именно такая.
---
что есть дубль? в примере записи уникальны по трем полям
---
дублем является повторный вывод значения из левой таблицы когда в правой ключ встречается несколько раз
---
Т.е. оставить в правой таблице только по одной записи для каждого ключа?

```1c
    ВЫБРАТЬ
    Т2.Ключ КАК Ключ,
    Т2.Значение КАК Значение
    ПОМЕСТИТЬ ВТ
    ИЗ
    &Т2 КАК Т2
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ.Ключ КАК Ключ,
    МАКСИМУМ(ВТ.Значение) КАК Значение
    ИЗ
    ВТ КАК ВТ

    СГРУППИРОВАТЬ ПО
    ВТ.Ключ
```
---
из первой таблицы все строки должны выбраться, а потом из творой по ключу не повторяя строки второй
---
Так я в (11) и написал пример - как получить уникальные ключи (и Максимальный текст для каждого из уникальных ключей) для второй таблицы...

Или что - хочется, что бы полностью запрос тебе написали???
---
Или что - хочется, что бы полностью запрос тебе написали??? Только дошло?
---
как ты написал работать не будет, мне нужны все значения а не только максимум
---
в (7) написано: дублем является повторный вывод значения из левой таблицы когда в правой ключ встречается несколько раз

Я это понял так.
"Левая"

```1c
    Ключ Значение
    1 Значение1
    1 Значение2
    2 Значение3
    3 Значение4
    4 Значение5
```

"Правая"

```1c
    Ключ Значение
    1 ЗначениеПравое1
    1 ЗначениеПравое2
    2 ЗначениеПравое3
    3 ЗначениеПравое4
    4 ЗначениеПравое5
    2 ЗначениеПравое6
    3 ЗначениеПравое7
    4 ЗначениеПравое8
```

От "правой" (в предложенном в (11) варианте) останется

```1c
    Ключ Значение
    1 ЗначениеПравое2
    2 ЗначениеПравое6
    3 ЗначениеПравое7
    4 ЗначениеПравое8
```

И дальше - левое соединение "левой" таблицы с "остатком правой", и результатом будет

```1c
    Ключ ЗначениеЛевое ЗначениеПравое
    1 Значение1 ЗначениеПравое2
    1 Значение2 ЗначениеПравое2
    2 Значение3 ЗначениеПравое6
    3 Значение4 ЗначениеПравое7
    4 Значение5 ЗначениеПравое8
```
---
Все данные должны быть выведены из второй таблицы ничего не урезая, это как если бы мы первую таблицу перебирали циклом, а во второй искали строку по ключу и удаляем найденое из второй таблицы(только 1 найденую стрку, как метод Найти() в таблице значений), чтобы не получать второй раз.
---
Этот алгоритм нужно сделать в запросе?
```1c
    Для Каждого Стр1 Из Таблица1 Цикл

    НоваяСтрока = ТаблицаИтог.Добавить();
    НоваяСтрока.НомерСтроки = Стр1.НомерСтроки;
    НоваяСтрока.Текст = Стр1.Текст;

    МассивСтрок = Таблица2.НайтиСтроки(Новый Структура("НомерСтроки", Стр1.НомерСтроки));
    Для Каждого Стр2 Из МассивСтрок Цикл
    Если ТаблицаИтог.Найти(Стр2.Текст2, "Текст2") = Неопределено Тогда
    НоваяСтрока.Текст2 = Стр2.Текст2;
    Прервать;
    КонецЕсли;
    КонецЦикла;

    КонецЦикла;
```
---
Без 100 грамм не разобраться. :-) Два поиска по разным таблицам в двух вложенных циклах....
По моему, в запросе понятнее выглядит. Но тут, конечно - кто к чему привык.
---
По моему, в запросе понятнее выглядитКакой от этого толк, если ваш запрос не может быть переведен в язык запросов 1С?
---
Может.
В {28} написано как.
---
Так или иначе, в 28 и в 16 предлагается делать сквозную нумерацию, а не в рамках номера строки. Как это может решить задачу в общем случае, если, например количество строк таблиц отличается?
---
В {28} написано как это делать в рамках значения поля.
При нумерации сортируете по необходимому полю. Находите минимум для каждого значения этого поля, а далее от сквозной нумерации всех строк отнять минимум, который соответствует значению поля.

Как-то так, примерно....
То что пишется одной строкой в 1С целый роман Война и Мир.... :-)
---
Как это может решить задачу в общем случае, если, например количество строк таблиц отличается? Это вопрос к формулировке задания. Выше уже писал. Уточнят - автор допилит.
Общее решение от этого не изменится.
---
```1c
    Таблица1 = Новый ТаблицаЗначений();
    Таблица1.Колонки.Добавить("НомерСтроки");
    Таблица1.Колонки.Добавить("Текст");

    Таблица2 = Новый ТаблицаЗначений();
    Таблица2.Колонки.Добавить("НомерСтроки");
    Таблица2.Колонки.Добавить("Текст2");

    ТаблицаИтог = Новый ТаблицаЗначений();
    ТаблицаИтог.Колонки.Добавить("НомерСтроки");
    ТаблицаИтог.Колонки.Добавить("Текст");
    ТаблицаИтог.Колонки.Добавить("Текст");

    Для Каждого Стр1 Из Таблица1 Цикл

    НоваяСтрока = ТаблицаИтог.Добавить();
    НоваяСтрока.НомерСтроки = Стр1.НомерСтроки;
    НоваяСтрока.Текст = Стр1.Текст;

    Строка = Таблица2.Найти(Стр1.НомерСтроки,"НомерСтроки");
    Если НЕ Строка = Неопределено Тогда
    НоваяСтрока.Текст2 = Строка.Текст2;
    Таблица2.Удалить(Строка);
    КонецЕсли;

    КонецЦикла;
```
---
Тогда я совершенно не понимаю - чего хочется получить из этих двух таблиц...
---
Ответ в {10} и {16}. Сортировать во временных таблицах можно и даже нумеровать по группам, но в 1С не сразу.
Решение ниже не полное. Оно не учитывает, что делать если элементов будет не равное количество по каждому номеру. Но что делать в этом случае, собственно и в задании нет. :-)
Поэтому ничего не делал.
---
Только не понял, что там с нумерацией не с 1 в PsgSQL.
---
Читал, что в реализации АвтоНомерЗаписи в запросе в платформе 1С в PsgSQL может начинаться не с 1.
---
1+автономерзаписи и вот уже с 2-х. Не важно с какой цифры начинать отсчет. Главное что бы одинаково.

В PsgSQL можно начинать автономизацию первичного ключа не с 1.
Что-то типа такого:
ALTER SEQUENCE ИмяПоследовательности START WITH 999;
Это немного про другое.

Обычный ROW_NUMBER() начинается с 1, но арифметикой, можно легко поправить.
5 + ROW_NUMBER() OVER(...