Имя: Пароль:
1C
 
Вложенный запрос выходит пустым
0 Coldboy
 
27.08.14
14:34
Здравствуйте. Есть два запроса, по отдельности оба работают, когда их соедению выборку через вложенные делаю, а затем сравнивая параметры получаю нужный, выдает пустой результат. Почему?
Вот сам запрос:
"ВЫБРАТЬ
                           |    ВЫБОР
                           |        КОГДА НеПустой.Период >= ПустойСклад.Период
                           |            ТОГДА НеПустой.ЧелКомплект
                           |        ИНАЧЕ ПустойСклад.ЧелКомплект
                           |    КОНЕЦ КАК ЧелКомплект
                           |ИЗ
                           |    (ВЫБРАТЬ
                           |        ТаблицаСвязиЧелКомплектаСрезПоследних.ЧелКомплект КАК ЧелКомплект,
                           |        ТаблицаСвязиЧелКомплектаСрезПоследних.Период КАК Период
                           |    ИЗ
                           |        РегистрСведений.ТаблицаСвязиЧелКомплекта.СрезПоследних(
                           |                &Период,
                           |                Номенклатура = &Номенклатура
                           |                    И Склад = &ПустойСклад) КАК ТаблицаСвязиЧелКомплектаСрезПоследних) КАК ПустойСклад,
                           |    (ВЫБРАТЬ
                           |        ТаблицаСвязиЧелКомплектаСрезПоследних.Период КАК Период,
                           |        ТаблицаСвязиЧелКомплектаСрезПоследних.ЧелКомплект КАК ЧелКомплект
                           |    ИЗ
                           |        РегистрСведений.ТаблицаСвязиЧелКомплекта.СрезПоследних(
                           |                &Период,
                           |                Номенклатура = &Номенклатура
                           |                    И Склад = &Склад) КАК ТаблицаСвязиЧелКомплектаСрезПоследних) КАК НеПустой"
1 butterbean
 
27.08.14
14:36
а связи где??
2 Ёпрст
 
27.08.14
14:36
(0) поля местами поменяй
3 Ёпрст
 
27.08.14
14:37
(1) ? там кросс джоин
4 Coldboy
 
27.08.14
14:39
(2) какие именно?
5 Ёпрст
 
27.08.14
14:41
(4) да в селекте попробуй , чтоб в обоих запросах поля были в одинаковом порядке ЧелКомплект, Период (хотя, это пофигу, но мало ли :) )
6 Ёпрст
 
27.08.14
14:41
А ежели
Выбрать * ИЗ... Кажет че ?
7 butterbean
 
27.08.14
14:44
я может чего-то не понимаю, но там ведь результат типа:
Период1  NULL
Период2  NULL
NULL     Период3
NULL     Период4
8 Coldboy
 
27.08.14
14:44
(5) без разницы пробывал.
9 Coldboy
 
27.08.14
14:44
(7) это же не объединение.
10 Ёпрст
 
27.08.14
14:45
(8) ага, а (6) ?
11 Wobland
 
27.08.14
14:46
хочешь сказать, что таб1 или таб2 что-то содержат, а их произведение - нет?
12 Крошка Ру
 
27.08.14
14:47
(8)Вот это он как определит:

КОГДА НеПустой.Период >= ПустойСклад.Период


ежели связи нет?
13 Ёпрст
 
27.08.14
14:48
(12) :)
какая связь нужна при cross join ?
14 Coldboy
 
27.08.14
14:48
(11) таб2 содержит, таб1 нет, а произведение их ничего не содержит, хотя должно.
15 Ёпрст
 
27.08.14
14:49
Че кажет (6) ?
16 Wobland
 
27.08.14
14:50
(14) протирай телескоп
17 Coldboy
 
27.08.14
14:50
КОГДА ЕСТЬNULL(НеПустой.Период, ДАТАВРЕМЯ(1, 1, 1)) >= ЕСТЬNULL(ПустойСклад.Период, ДАТАВРЕМЯ(1, 1, 1))
18 Coldboy
 
27.08.14
14:50
(16) пробывал и так и все равно.
19 Simod
 
27.08.14
14:51
Замени ВЫБОР на * как в (6). Сразу все понятно станет.
20 Coldboy
 
27.08.14
14:54
(19) ?
(6) все пояли если беру все равно.
21 Coldboy
 
27.08.14
14:55
(16) что не так ?
22 Крошка Ру
 
27.08.14
14:56
(13) Чот не догоняю. По сути выборка из двух независимых друг от друга вложенных запросов. Как определить какое значение "НеПустой.Период" соответствует какому значению "ПустойСклад.Период", чтоб их сравнить?
23 Ёпрст
 
27.08.14
14:56
(14) А че ты хочешь тогда ?
Там всегда будет пустая выборка - це же произведение
24 Ёпрст
 
27.08.14
14:56
Вот ежели был бы full join - были бы строчки
25 Ёпрст
 
27.08.14
14:57
а так, cross  join с пустой табличкой даст пустую табличку
26 Coldboy
 
27.08.14
14:58
(25) так как мне быть ?
27 Ёпрст
 
27.08.14
14:58
(26) ну не знаю, мот тебя union all устроит просто?
28 Coldboy
 
27.08.14
14:58
все догнал связи не сделал.
29 Ёпрст
 
27.08.14
14:59
или full join
30 Coldboy
 
27.08.14
14:59
"ВЫБРАТЬ
                           |    ВЫБОР
                           |        КОГДА ЕСТЬNULL(НеПустой.Период, ДАТАВРЕМЯ(1, 1, 1)) >= ЕСТЬNULL(ПустойСклад.Период, ДАТАВРЕМЯ(1, 1, 1))
                           |            ТОГДА НеПустой.ЧелКомплект
                           |        ИНАЧЕ ПустойСклад.ЧелКомплект
                           |    КОНЕЦ КАК ЧелКомплект
                           |ИЗ
                           |    (ВЫБРАТЬ
                           |        ТаблицаСвязиЧелКомплектаСрезПоследних.Период КАК Период,
                           |        ТаблицаСвязиЧелКомплектаСрезПоследних.Номенклатура КАК Номенклатура,
                           |        ТаблицаСвязиЧелКомплектаСрезПоследних.ЧелКомплект КАК ЧелКомплект,
                           |        ТаблицаСвязиЧелКомплектаСрезПоследних.ГотоваяПродукция КАК ГотоваяПродукция,
                           |        ТаблицаСвязиЧелКомплектаСрезПоследних.Склад КАК Склад
                           |    ИЗ
                           |        РегистрСведений.ТаблицаСвязиЧелКомплекта.СрезПоследних(
                           |                &Период,
                           |                Номенклатура = &Номенклатура
                           |                    И Склад = &Склад) КАК ТаблицаСвязиЧелКомплектаСрезПоследних) КАК НеПустой
                           |        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                           |            ТаблицаСвязиЧелКомплектаСрезПоследних.Период КАК Период,
                           |            ТаблицаСвязиЧелКомплектаСрезПоследних.Номенклатура КАК Номенклатура,
                           |            ТаблицаСвязиЧелКомплектаСрезПоследних.ЧелКомплект КАК ЧелКомплект,
                           |            ТаблицаСвязиЧелКомплектаСрезПоследних.ГотоваяПродукция КАК ГотоваяПродукция,
                           |            ТаблицаСвязиЧелКомплектаСрезПоследних.Склад КАК Склад
                           |        ИЗ
                           |            РегистрСведений.ТаблицаСвязиЧелКомплекта.СрезПоследних(
                           |                    &Период,
                           |                    Номенклатура = &Номенклатура
                           |                        И Склад = &ПустойСклад) КАК ТаблицаСвязиЧелКомплектаСрезПоследних) КАК ПустойСклад
                           |        ПО НеПустой.ЧелКомплект = ПустойСклад.ЧелКомплект"
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.