Как сформировать журнал из 2 таблиц? | |
---|---|
shumik73 Автор Сообщений: 489 Откуда: Алматы Дата регистрации: 10.05.2006 |
Добрый день всем!
Есть таблица с заявками - она периодически пополняется
Пользователи выбирают заявки и формируют оплаты Могут выбрать одну заявку, а могут несколько В момент формирования оплаты происходит проверка каждой заявки - чтобы заявка не смогла быть оплачена дважды Таким образом сформировалась вот такая таблица оплат:
В каждой строке оплаты есть поле LIST_OPLAT где содержится номера заявок с которых была сформирована оплата Пользователь отрывает журнал с заявками, который формируется вот с такого запроса.
Такой SQL-запрос не стандартной как обычно "ON Z.ID_ZAYVKA=O.LIST_OPLAT" необходимо зная Z.ID_ZAYVKA найти и отобразить все записи из таблицы O, где в поле O.LIST_OPLAT может нахотся этот самый Z.ID_ZAYVKA Использование CHARINDEX в этом случае не оптимальный вариант ![]() Ситуация в том что таблица заявок в 10 тыс записей открывается за 5-7 секунд. а запрос указанный выше грузится 40 секунд. Если бы с одной заявки формировалась только одна оплата, то поле O.LIST_OPLAT было бы цифровое.
Вариант Split тоже не вариант
надо то всего из двух таблиц заявок и оплат сформировать один журнал [attachment 36520 .png] ![]() |
Re: Как сформировать журнал из 2 таблиц? | |
---|---|
leonid Сообщений: 3176 Откуда: Рига Дата регистрации: 03.02.2006 |
Вот что бы я посоветовал, это почитать, что такое Первая нормальная форма, и почему не следует ее нарушать. А заодно, почему не следует нарушать вторую и третью. ![]() |
Re: Как сформировать журнал из 2 таблиц? | |
---|---|
sphinx Сообщений: 30457 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Прмсоединяюсь.
Разве код заявки неоднозначно идентифицирует НАЗВАНИЕ заявки? Если так - то это неправильно, и надо нормализовать отношения между сущностями. ------------------ "Veni, vidi, vici!"(с) ![]() |
Re: Как сформировать журнал из 2 таблиц? | |
---|---|
Артём Сообщений: 55 Дата регистрации: 23.04.2001 |
а я бы попробовал сразу учесть, что будут недоплаты и переплаты. то есть , сумма оплаты не обязательно равна сумме заявок
Исправлено 1 раз(а). Последнее : Артём, 23.03.23 22:27 ![]() |
Re: Как сформировать журнал из 2 таблиц? | |
---|---|
PaulWist Сообщений: 14431 Дата регистрации: 01.04.2004 |
Это что за сервер БД (MSSQL)?
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
Re: Как сформировать журнал из 2 таблиц? | |
---|---|
Владимир Максимов Сообщений: 14041 Откуда: Москва Дата регистрации: 02.09.2000 |
Общая идея, сформировать условие вида ",1,2,3," LIKE "%,1,%" Как это лучше сделать, зависит от SQL-сервера. Хотя, похоже, речь идет об MS SQL. Ну и еще от того, как номера записаны в списке. Возможно, надо будет еще удалить внутренние пробелы. Т.е. не только ведущие/концевые, но и которые могут быть между запятыми PS: Ну, про то, что лучше бы, вместо (в дополнение) поля O.LIST_OPLAT сделать дополнительную (подчиненную) таблицу со списком кодов заявок уже сказали ![]() PPS: Хотя, да, через CHARINDEX() именно это и сделано. Просто сразу было не понятно из-за громоздкой конструкции ![]() Исправлено 2 раз(а). Последнее : Владимир Максимов, 24.03.23 10:03 ![]() |
Re: Как сформировать журнал из 2 таблиц? | |
---|---|
ssa Сообщений: 12922 Откуда: Москва Дата регистрации: 23.03.2005 |
Угу, не самые старые версии. ------------------ Лень - это неосознанная мудрость. ![]() |
Re: Как сформировать журнал из 2 таблиц? | |
---|---|
Владимир Максимов Сообщений: 14041 Откуда: Москва Дата регистрации: 02.09.2000 |
Конструкция избыточная. Много лишних преобразований, которые могут в итоге увеличить время выборки IsNull() - это имеет смысл, если в самих полях может быть значение NULL. Но исходя из описания такого быть не может. TRIM(CAST(Z.ID_ZAYVKA as char)) - кроме типа char есть еще тип varchar, который как раз тем и отличается, что не дополняет поле концевыми пробелами. Т.е. после преобразования в тип varchar нет необходимости отсекать ведущие и концевые пробелы через TRIM() Итого, в остатке, получается так
Возможно, такое "очищенное" выражение будет работать быстрее Исправлено 2 раз(а). Последнее : Владимир Максимов, 24.03.23 10:36 ![]() |
Re: Как сформировать журнал из 2 таблиц? | |
---|---|
PaulWist Сообщений: 14431 Дата регистрации: 01.04.2004 |
Не будет, будет NL, поскольку неизвестна статистика "правой" таблицы в соединении.
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено 1 раз(а). Последнее : PaulWist, 24.03.23 11:21 ![]() |
Re: Как сформировать журнал из 2 таблиц? | |
---|---|
ssa Сообщений: 12922 Откуда: Москва Дата регистрации: 23.03.2005 |
Правильно надо всё использовать...
------------------ Лень - это неосознанная мудрость. ![]() |
Re: Как сформировать журнал из 2 таблиц? | |
---|---|
Vedmak Сообщений: 5748 Откуда: CiTY Дата регистрации: 30.10.2003 |
JSON or HTML.
Логгирование событий приложения приятнее анализировать без зависимости от самого приложения. ------------------ Говорить стоит лишь для тех, кто слушает. ![]() |
© 2000-2023 Fox Club  |