|
Выбрать значения из одной таблицы которых нет в другой.
|
|||
---|---|---|---|
#18+
Понимаю что тема давно заезжена, но у меня не получается. Понимаю что надо это делать джойнами, но опять таки не получается. Имеем: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
1. Из отчетов формируются реестры в Excel. В реестр, из отчетов, может попасть несколько строк у которых одинаковые значения BD, ZV_DATA, CODE_ORG, TYP, POSL, NUMB но разная сумма в PR_SM. Это нормально т.к. финансирование может быть за несколько месяцев в одном. 2. Поставщик заполняет свои значения и возвращает реестр на подпись. 3. Необходимо сверить реестр который формировался с тем который вернул поставщик. В теории, если поставщик не химичит поле R_SM должно быть точно такое же как PR_SM, поле R_FK - фактическое начисление , R_FN - сумма к финансированию которая не должна быть больше PR_SM но может быть меньше. Важно чтобы: 1. Общая сумма по реестру не поменялась 2. Не должна поменятся общая сумма по коду товара NUMB. Решил это сделать формированием таблицы для сверки CHECK_REESTR. В которую загружаю данные из отчетов с суммированием по полю sum(PR_SM) group by BD, ZV_DATA, CODE_ORG, TYP, POSL, NUMB. Поля R_SM, R_FK, R_FN оставляю пустыми (null). Далее в таблицу TMP_CHECK_REESTR импортирую данные из реестра Excel. Потом по совпадению полей BD, ZV_DATA, CODE_ORG, TYP, POSL, NUMB в двух таблицах обновляю поля R_SM, R_FK, R_FN общими суммами: для этого выполняю 2 запроса: открываю запрос для нахождения сумм: Код: sql 1. 2. 3.
потом в цикле делаю изменение: Код: sql 1. 2. 3.
Возможно это все можно сделать и одним запросом - подскажите как, буду очень благодарен. Тут пока вопросов нет. Все записи которые есть обновятся. Но если поставщик нахимичил, то: 1. Если он удалил товар - поля R_SM, R_FK, R_FN останутся пустыми. Это я быстро отловлю. 2. Если поставщик добавил товар. как мне отловить что есть в TMP_CHECK_REESTR, но нет в CHECK_REESTR Делаю так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
не получается. Пробовал и Right и full - не получается. Но я знаю точно что запись есть так как сам ее туда добавил (чтобы протестировать). Подскажите что я неправильно делаю. -------------------------- Firebird 3.0.2.32703; IBExpert 2018.1.6.1; Windows 10 32-bit; 4Gb RAM; SSD 512Mb + HDD 1 Tb; Настройки по умолчанию Среда разработки: Delphi XE2 + FIBPlus 7.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 13:18 |
|
Выбрать значения из одной таблицы которых нет в другой.
|
|||
---|---|---|---|
#18+
akrushВыбрать значения из одной таблицы которых нет в другой. Есть две таблички, A и B. A: id int nm varchar (10) B: id int nm varchar (10) Выбираем записи из A, у которых значение поля nm не встречаются в B: Код: sql 1. 2. 3.
PS: бред про " реестры в Excel" <и дальше> не читал. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 13:36 |
|
Выбрать значения из одной таблицы которых нет в другой.
|
|||
---|---|---|---|
#18+
чччД, или select ... from A jeft join b on A.nm = B.nm where b.nm is null выбираем все записи из A, для которых нет соответствия в B. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 13:39 |
|
Выбрать значения из одной таблицы которых нет в другой.
|
|||
---|---|---|---|
#18+
kdv, а возможно, что "правильнее" будет так: Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 13:47 |
|
Выбрать значения из одной таблицы которых нет в другой.
|
|||
---|---|---|---|
#18+
kdv, Это я все понимаю. А как быть если проверка идет по 5 полям. В вашем примере 1 поле - это легко. А 5 мне кажется "не взлетит" ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 13:50 |
|
Выбрать значения из одной таблицы которых нет в другой.
|
|||
---|---|---|---|
#18+
kdv, с проверкой на нулл (where b.nm is null) получилось. Спасибо. Сейчас буду крутить на реальном массиве данных ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 13:53 |
|
Выбрать значения из одной таблицы которых нет в другой.
|
|||
---|---|---|---|
#18+
akrushkdv, Это я все понимаю. А как быть если проверка идет по 5 полям. В вашем примере 1 поле - это легко. А 5 мне кажется "не взлетит" AND ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2018, 18:20 |
|
|
start [/forum/topic.php?fid=40&fpage=37&tid=1561244]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 318ms |
total: | 455ms |
0 / 0 |