Имя: Пароль:
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))
                           |            ТОГДА НеПустой.ЧелКомплект
                           |        ИНАЧЕ ПустойСклад.ЧелКомплект
                           |    КОНЕЦ КАК ЧелКомплект
                           |ИЗ
                           |    (ВЫБРАТЬ
                           |        ТаблицаСвязиЧелКомплектаСрезПоследних.Период КАК Период,
                           |        ТаблицаСвязиЧелКомплектаСрезПоследних.Номенклатура КАК Номенклатура,
                           |        ТаблицаСвязиЧелКомплектаСрезПоследних.ЧелКомплект КАК ЧелКомплект,
                           |        ТаблицаСвязиЧелКомплектаСрезПоследних.ГотоваяПродукция КАК ГотоваяПродукция,
                           |        ТаблицаСвязиЧелКомплектаСрезПоследних.Склад КАК Склад
                           |    ИЗ
                           |        РегистрСведений.ТаблицаСвязиЧелКомплекта.СрезПоследних(
                           |                &Период,
                           |                Номенклатура = &Номенклатура
                           |                    И Склад = &Склад) КАК ТаблицаСвязиЧелКомплектаСрезПоследних) КАК НеПустой
                           |        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                           |            ТаблицаСвязиЧелКомплектаСрезПоследних.Период КАК Период,
                           |            ТаблицаСвязиЧелКомплектаСрезПоследних.Номенклатура КАК Номенклатура,
                           |            ТаблицаСвязиЧелКомплектаСрезПоследних.ЧелКомплект КАК ЧелКомплект,
                           |            ТаблицаСвязиЧелКомплектаСрезПоследних.ГотоваяПродукция КАК ГотоваяПродукция,
                           |            ТаблицаСвязиЧелКомплектаСрезПоследних.Склад КАК Склад
                           |        ИЗ
                           |            РегистрСведений.ТаблицаСвязиЧелКомплекта.СрезПоследних(
                           |                    &Период,
                           |                    Номенклатура = &Номенклатура
                           |                        И Склад = &ПустойСклад) КАК ТаблицаСвязиЧелКомплектаСрезПоследних) КАК ПустойСклад
                           |        ПО НеПустой.ЧелКомплект = ПустойСклад.ЧелКомплект"