Имя: Пароль:
1C
1С v8
Помогите с запросом
0 shamannk
 
14.01.13
18:13
Есть табличка соответствий вида:
Поле1   Поле2
1       2
2       1
3       4
5       6
4       3
6       5

Нужно оставить только 1 соответствие:
1       2
4       3
5       6
Не важно какое 1 к 2 или 2 к 1.
1 undertaker
 
14.01.13
18:17
не понятен критерий, по которому так получилось....
2 shamannk
 
14.01.13
18:20
(1) Из таблички видно что в 1ой строе 1 соответствует 2 а во второй строке 2 соответствует 1 в результат должна попасть только одна их этих строк (любая).
3 palpetrovich
 
14.01.13
18:22
"выбор" надо юзать наверне
4 Fragster
 
гуру
14.01.13
18:22
Выбрать т1.п1, т1.п2 Из
левое соединение по т1.п2 = т2.п1 и т1.п2 = т2.п1 и Т2.П1 >Т2.П2
Где Т2.П1 Есть NULL
5 palpetrovich
 
14.01.13
18:25
(4) мне показалось нужно нечто типа
ВЫБОР КОГДА а=в+1 Тогда
Истина
ВЫБОР КОГДА в=ф+1 Тогда
Истина
Иначе
Ложь
КОНЕЦ как УсловиеОтбора
6 palpetrovich
 
14.01.13
18:25
* в=ф+1 == в=а+1  :)
7 shamannk
 
14.01.13
18:26
(5) Там не числа просто для примера написал.
8 Reset
 
14.01.13
18:27
Вроде похожая задача
v8: Запрос на подумать
9 palpetrovich
 
14.01.13
18:28
(7) ну,  я для примера и подумал ...наверное будет нелишним настоящий критерий отбора озвучить :)
10 Fragster
 
гуру
14.01.13
18:28
это походу тестовое задание у кого-то
11 shamannk
 
14.01.13
18:28
(8) Да, только без 1 к 1
12 Reset
 
14.01.13
18:29
(11) ну заменить >= на >
13 shamannk
 
14.01.13
18:29
(9) Он и не работает что будет если связь 4 к 6 или 5 к 5
14 Fragster
 
гуру
14.01.13
18:31
ВЫБРАТЬ
   "1" КАК Пункт1,
   "1" КАК Пункт2
ПОМЕСТИТЬ втСвязи

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   "1",
   "2"

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   "2",
   "1"

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   "2",
   "2"

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   "2",
   "3"

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   "1",
   "3"

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   "3",
   "1"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
   втСвязи1.Пункт1,
   втСвязи1.Пункт2
ИЗ
   втСвязи КАК втСвязи1
       ЛЕВОЕ СОЕДИНЕНИЕ втСвязи КАК втСвязи2
       ПО втСвязи1.Пункт1 = втСвязи2.Пункт2
           И втСвязи1.Пункт2 = втСвязи2.Пункт1
           И (втСвязи2.Пункт1 < втСвязи2.Пункт2)
       
Где втСвязи2.Пункт1 Есть NULL
15 Reset
 
14.01.13
18:43
Вариант без соединения (не мое, из (8))

ВЫБРАТЬ РАЗЛИЧНЫЕ
   ВЫБОР КОГДА ВТ.П1 < ВТ.П2 ТОГДА ВТ.П1 ИНАЧЕ ВТ.П2 КОНЕЦ КАК П1,
   ВЫБОР КОГДА ВТ.П1 > ВТ.П2 ТОГДА ВТ.П1 ИНАЧЕ ВТ.П2 КОНЕЦ КАК П2
ПОМЕСТИТЬ ВключаяОдинаковые
ИЗ    ВТ КАК ВТ;

ВЫБРАТЬ
   ВключаяОдинаковые.П1,
   ВключаяОдинаковые.П2
ИЗ
   ВключаяОдинаковые КАК ВключаяОдинаковые
ГДЕ
   ВключаяОдинаковые.П1 <> ВключаяОдинаковые.П2
16 Reset
 
14.01.13
18:43
Идея (с) @Ненавижу 1С
17 Reset
 
14.01.13
18:46
ять, еще одна вт совсем лишняя.
Вот

ВЫБРАТЬ РАЗЛИЧНЫЕ
   ВЫБОР КОГДА ВТ.П1 < ВТ.П2 ТОГДА ВТ.П1 ИНАЧЕ ВТ.П2 КОНЕЦ КАК П1,
   ВЫБОР КОГДА ВТ.П1 > ВТ.П2 ТОГДА ВТ.П1 ИНАЧЕ ВТ.П2 КОНЕЦ КАК П2
ИЗ    ВТ КАК ВТ
Где ВТ.П1 <> ВТ.П2
18 palpetrovich
 
14.01.13
19:16
(13) а (0) разница только а один
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший