powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Дублирование записей в запросе
10 сообщений из 10, страница 1 из 1
Дублирование записей в запросе
    #38803199
Green Color
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем. Есть база в которой сохраняются остатки с разных торговых точек (каждая точка имеет свой уникальный ID в таблице PLACE_NAME_REMOTE). Для оптимизации было решено сохранять ID и название товаров в одной таблице, а остатки в других двух (документ загрузка и остатки по документу) с привязкой по ID товара и ID места. Получение данный происходит через каждые 10 минут. Поэтому на единицу времени активен только один документ загрузки остатка (ostatok_doc_remote.is_active = 1). Вся проблема в том что товар с ID НАПРИМЕР 3015 может быть в наличии на точке №1, но его точно нет на точке №3, мне же в результате запроса:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
select 
    ostatok_doc_remote.ostatok_doc_remote_id,
    goods_remote.goods_remote_id,
    goods_remote.skarb_id,
    goods_remote.goods_name,
    ostatok_items_remote.ostatok_items_remote_id,
    ostatok_items_remote.ostatok,
    producer_remote.producer_name,
    place_name_remote.base_id
from place_name_remote
   inner join ostatok_doc_remote on (place_name_remote.base_id = ostatok_doc_remote.base_id)
   inner join ostatok_items_remote on (ostatok_doc_remote.ostatok_doc_remote_id = ostatok_items_remote.ostatok_doc_remote_id)
   inner join goods_remote on (ostatok_items_remote.goods_id = goods_remote.skarb_id)
   inner join producer_remote on (goods_remote.producer_id = producer_remote.producer_remote_id)
where 
   (
      (ostatok_items_remote.goods_id = 3015)
   and 
      (ostatok_doc_remote.is_active = 1)
   )


показывает, что он есть на точке №1 и на точке №3, подставляя остатки с точки №1.

Бьюсь уже пару часов - результата нет. Помогите пожалуйста.
...
Рейтинг: 0 / 0
Дублирование записей в запросе
    #38803203
Green Color
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Дублирование записей в запросе
    #38803206
Green Color
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Дублирование записей в запросе
    #38803211
Green Color
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая вот привязка - тот же результат :(
...
Рейтинг: 0 / 0
Дублирование записей в запросе
    #38803220
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Green Color,

дело в типе соединения.
читай про джойны.
...
Рейтинг: 0 / 0
Дублирование записей в запросе
    #38803250
Green Color
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Увы, но использовав
Код: plsql
1.
 right outer join goods_remote on (ostatok_items_remote.goods_id = goods_remote.skarb_id)


результат тот же
...
Рейтинг: 0 / 0
Дублирование записей в запросе
    #38803268
Green Color
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скорее всего проблема в структуре базы ostatok_items_remote. Нужно добавить поле base_id и сделать привязку к place_name_remote.
...
Рейтинг: 0 / 0
Дублирование записей в запросе
    #38803290
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Green Color,

посторонние вопросы

- почему у всех таблиц постфикс remote? в этой базе есть таблицы без этого постфикса?
- используйте алиасы таблиц. ostatok_items_remote.ostatok_items_remote_id - это просто кошмар какой-то.
...
Рейтинг: 0 / 0
Дублирование записей в запросе
    #38803314
Green Color
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отвечаю:
1 - просто еще есть таблицы с _local (выгружаются данные с локальной точки - потому что запрос на их получение может прийти с разных точек в разное время)
2- В реальности запросы пишу так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select i.ostatok_items_remote_id,i.goods_id,d.added,p.place_name,g.goods_name,pr.producer_name,i.ostatok as ostatok,i.price_pro from goods_remote g
inner join ostatok_items_remote i on (g.skarb_id=i.goods_id)
inner join ostatok_doc_remote d on (i.ostatok_doc_remote_id=d.ostatok_doc_remote_id)
inner join producer_remote pr on (g.producer_id=pr.skarb_id)
inner join place_name_remote p on(g.base_id=p.base_id)
where upper(g.goods_name) like upper(:search_text) and d.is_active=1
order by 1


Просто реально заплутался в запросе и решил использовать визуальный построитель (запрос сгенерировал он)
...
Рейтинг: 0 / 0
Дублирование записей в запросе
    #38803397
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Green Color,

вообще визуальный построитель путает ещё больше. Надо чётко понимать что ты пишешь. С ходу могу сказать, что у тебя структуру таблиц сначала надо нормализовать.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Дублирование записей в запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]