Имя: Пароль:
1C
1С v8
Запрос. Исключить выборку одной таблицы из выборки другой.
, ,
0 JackАndJill
 
30.12.13
13:10
Здравствуйте.  Собственно, есть два запроса. Один выдает данные, содержащие в том числе ненужные строки. Второй выдает только строки, которые не нужны. Надо исключить из первой выборки те строки, что содержатся во второй.
1 Wobland
 
30.12.13
13:11
так. что дальше?
2 БешНог
 
30.12.13
13:11
соедини, будь мужиком, блеать!
3 dj_serega
 
30.12.13
13:12
(2) Только "НЕ" не забыть.
4 JackАndJill
 
30.12.13
13:12
(2) Я получу строки, содержащиеся в обеих таблицах.
5 Strogg
 
30.12.13
13:14
left outer join. Както так, если мне не изменяет памьять :)
6 JackАndJill
 
30.12.13
13:14
(3) Поставив НЕ, получаю произведение таблиц. Т.е. строк будет X * Y
7 БешНог
 
30.12.13
13:14
соедини и выбери где есть нул
8 Wobland
 
30.12.13
13:15
(4) отфильтруй, бл***
9 JackАndJill
 
30.12.13
13:19
Вот первый запрос:
ВЫБРАТЬ
    РаботникиОрганизацийСрезПоследних.Сотрудник
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(
            ,
            ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
                И Сотрудник.ТекущаяСтавка <> 0
                И Сотрудник.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)) КАК РаботникиОрганизацийСрезПоследних
10 JackАndJill
 
30.12.13
13:20
Вот второй:
ВЫБРАТЬ
    СостояниеРаботниковОрганизацийСрезПоследних.Сотрудник КАК Сотрудник
ИЗ
    РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних КАК СостояниеРаботниковОрганизацийСрезПоследних
ГДЕ
    СостояниеРаботниковОрганизацийСрезПоследних.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоУходуЗаРебенком)
    И &ТекущаяДата МЕЖДУ СостояниеРаботниковОрганизацийСрезПоследних.Период И СостояниеРаботниковОрганизацийСрезПоследних.ПериодЗавершения

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    СостояниеРаботниковОрганизацийСрезПоследних.Сотрудник
ИЗ
    РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних(, ) КАК СостояниеРаботниковОрганизацийСрезПоследних
ГДЕ
    СостояниеРаботниковОрганизацийСрезПоследних.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоБеременностиИРодам)
    И СостояниеРаботниковОрганизацийСрезПоследних.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1)
    И СостояниеРаботниковОрганизацийСрезПоследних.Период < &ТекущаяДата
11 JackАndJill
 
30.12.13
13:21
Из стандартной ЗУП.
12 МихаилМ
 
30.12.13
13:26
на прошлой неделе был аналогичный вопрос.
в поиск
13 JackАndJill
 
30.12.13
13:33
Ага, кажется сделал.
14 JackАndJill
 
30.12.13
13:37
Полное соединение и потом фильтр, 7,8 спс.
15 mzelensky
 
30.12.13
13:57
(0) Буквально на тай неделе эта тема ОООЧЕНЬ плотно обсасывалась.
16 Goggy
 
30.12.13
14:10
(14) В одно действие левым соединением.
17 mistеr
 
30.12.13
14:22
"НЕ В ()" уже предлагали?
18 Пол Ньюман
 
30.12.13
14:34
Любое поле из второй таблицы

ISNULL(ВтораяТаблица.ИмяПоля, НЕОПРЕДЕЛЕНО)

в условии ВтораяТаблица.ИмяПоля = Неопределено

Хотя может и ВтораяТаблица.ИмяПоля IS NULL прокатит, там есть ограничения при соединении по NULL, но про условие не помню
19 Goggy
 
31.12.13
10:49
Сразу видно кто на клюшках пилит свой Гкод)))
20 sanja26
 
31.12.13
10:51
(17) а если в млн записей?
21 mistеr
 
31.12.13
12:09
(20) То что?
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс