Имя: Пароль:
1C
1С v8
Запрос - сравнение 2-х таблиц
0 ws_mason
 
25.10.12
16:16
Есть две таблицы.
Как запросом вывести строки которые есть в 1-ой и отсутствуют во 2-ой.
1 Конфигуратор1с
 
25.10.12
16:17
(0)баян
2 GLazNik
 
25.10.12
16:18
(0) левое соединение и условие на NULL
3 vmv
 
25.10.12
16:18
руководсво разработчика часть 1

бегом-бегом
4 ws_mason
 
25.10.12
16:24
Конкретизирую, вот запрос:
ВЫБРАТЬ
ВыплатаТаблицаДокумента.Сотрудник,
ВыплатаТаблицаДокумента.Сумма,
ЕСТЬNULL(ЛицевыеСчета.Наименование, """") КАК ЛицевойСчет
ИЗ
Документ.Выплата.ТаблицаДокумента КАК ВыплатаТаблицаДокумента
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЛицевыеСчета КАК ЛицевыеСчета
ПО ВыплатаТаблицаДокумента.Сотрудник = ЛицевыеСчета.Владелец.Ссылка
ГДЕ ВыплатаТаблицаДокумента.Ссылка = &ТекущийДокумент
И ЛицевыеСчета.Банк = &Банк

в результате, те кто, имеет счет в &Банке попадает в мою табличку, а кто нет пролетает, вот тех кто не попал, надо показать отдельно.
5 ws_mason
 
25.10.12
16:25
&ТекущийДокумент - заданный через параметр документ выплаты
&Банк - заданный через параметр банк
6 1Страх
 
25.10.12
16:28
ВЫБРАТЬ
ВыплатаТаблицаДокумента.Сотрудник,
ВыплатаТаблицаДокумента.Сумма,
ЕСТЬNULL(ЛицевыеСчета.Наименование, """") КАК ЛицевойСчет
ИЗ
Документ.Выплата.ТаблицаДокумента КАК ВыплатаТаблицаДокумента
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЛицевыеСчета КАК ЛицевыеСчета
ПО ВыплатаТаблицаДокумента.Сотрудник = ЛицевыеСчета.Владелец
И ЛицевыеСчета.Банк = &Банк
ГДЕ ВыплатаТаблицаДокумента.Ссылка = &ТекущийДокумент
И ЛицевыеСчета.Владелец ЕСТЬ NULL
7 GLazNik
 
25.10.12
16:28
(4) а подумать? не?
Условие ЛицевыеСчета.Банк = &Банк говорит о том, что в окончательной выборке будут только строки с лицевыми счетами в банке &Банк. а тебе нужны строки в которых ЛицевыеСчета.Банк есть NULL. если же тебя интересуют лицевые счета конкретного банка, то перенеси условие ЛицевыеСчета.Банк = &Банк в соединение
8 ws_mason
 
25.10.12
16:32
(7) не думается, у меня уже 20-30, а завтра надо чтобы работало.
9 GLazNik
 
25.10.12
16:36
(8) время то еще детское, что б думалку выключало...
10 ws_mason
 
25.10.12
16:40
С учетом (6) переписал

ВЫБРАТЬ
   ВыплатаТаблицаДокумента.Сотрудник,
   ВыплатаТаблицаДокумента.Сумма,
   ЕСТЬNULL(ЛицевыеСчета.Наименование, """") КАК ЛицевойСчет
ИЗ
   Документ.Выплата.ТаблицаДокумента КАК ВыплатаТаблицаДокумента
   ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЛицевыеСчета КАК ЛицевыеСчета
   ПО ВыплатаТаблицаДокумента.Сотрудник = ЛицевыеСчета.Владелец
 И ЛицевыеСчета.Банк = &Банк
ГДЕ
   ВыплатаТаблицаДокумента.Ссылка = &ТекущийДокумент
   И ЛицевыеСчета.Владелец ЕСТЬ NULL

Получился список сотрудников без лицевых счетов в указанном банке.
Теперь бы объединить все в один запрос, чтобы если счет в указанном банке есть, то он выводился бы если нет то пустое значение.
11 ws_mason
 
25.10.12
16:41
(6) Спасибо!
12 GLazNik
 
25.10.12
16:45
(10) так уберите последнюю строку... и будет вам счастье...
13 1Страх
 
25.10.12
16:46
(10) а это вообще через ВЫБОР КОГДА ТОГДА делается
14 GLazNik
 
25.10.12
16:47
(13) это уже сделано через ЕСТЬNULL(ЛицевыеСчета.Наименование, """")
15 1Страх
 
25.10.12
16:48
(14) аа
16 ws_mason
 
26.10.12
08:16
Сегодня с утречка, отдохнувши, родил:

   ВЫБРАТЬ
       ВыплатаТаблицаДокумента.Сотрудник,
       ВыплатаТаблицаДокумента.Сумма,
       ЕСТЬNULL(ЛицевыеСчета.Наименование, "") КАК ЛицевойСчет
   ИЗ
       Документ.Выплата.ТаблицаДокумента КАК ВыплатаТаблицаДокумента
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЛицевыеСчета КАК ЛицевыеСчета
       ПО ВыплатаТаблицаДокумента.Сотрудник = ЛицевыеСчета.Владелец
         И ЛицевыеСчета.Банк = &Банк
   ГДЕ
       ВыплатаТаблицаДокумента.Ссылка = &ТекущийДокумент
   УПОРЯДОЧИТЬ ПО
       ВыплатаТаблицаДокумента.Сотрудник.Наименование

Теперь все ОК. Если счет в &Банке, то он попадает в табличку, если нет, то пустое значение счета.