Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
07.05.2020, 11:35
|
|||
---|---|---|---|
Можно ли сделать join только с уникальными значениями EAV? |
|||
#18+
В БД есть клиенты, у которых атрибуты указываются моделью EAV. Например, номера телефонов: clientattrval1phone799900011112phone799900022223phone79990001111 Есть таблица заявок, в которой фиксируются номера телефонов. Нужно сопоставить заявку с номером телефона, но только в том случае, если номер телефона уникален (то есть указан только у одного клиента). В приведенном выше примере телефон 79990001111 неуникален, поскольку задан у клиентов 1 и 3. Мне на ум приходят только что-то типа такого: Код: plsql 1. 2. 3. 4. 5.
Но не исключено, что матчить заявки и телефоны нужно будет не по равенству, а с помощью like или regexp, поэтому я бы хотел использовать более "легковесное" решение, чем подзапросы с группировкой. Не подскажите, в какую сторону смотреть? Oracle 10g. Количество клиентов порядка десятка тысяч, у каждого клиента в среднем десяток-два атрибутов. Количество заявок порядка десятка тысяч. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.05.2020, 12:02
|
|||
---|---|---|---|
|
|||
Можно ли сделать join только с уникальными значениями EAV? |
|||
#18+
Alibek B. Код: plsql 1.
Код: plsql 1. 2. 3. 4. 5. 6. 7.
Alibek B. матчить заявки и телефоны нужно будет не по равенству, а с помощью like или regexp если это делается потому, что в заявках не обязательно соблюдается принятый в EAV формат телефона, то на мой взгляд гораздо проще будет на лету привести номер из заявки в соответствие требуемому формату. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.05.2020, 12:02
|
|||
---|---|---|---|
Можно ли сделать join только с уникальными значениями EAV? |
|||
#18+
Alibek B., зачем UC as (select client, val as phone from UP join cdata using (val) where attr = 'phone')? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.05.2020, 12:22
|
|||
---|---|---|---|
Можно ли сделать join только с уникальными значениями EAV? |
|||
#18+
кит северных морей ...select min(client) client, val ... having count(distinct client) = 1 Действительно, не сообразил. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.05.2020, 12:38
|
|||
---|---|---|---|
Можно ли сделать join только с уникальными значениями EAV? |
|||
#18+
кит северных морей если это делается потому, что в заявках не обязательно соблюдается принятый в EAV формат телефона Нет, тут виновата некоторая "костыльность" — в поле "Телефон" помимо собственно номера телефона в некоторых случаях может дописываться определенная метка (3-4 символа). Сейчас используется такое выражение: regexp_replace(VALUE, '^(79\d{9})(\s+sms)?$', '\1') Если на рабочих данных производительности будет недостаточно, тогда буду думать дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.05.2020, 12:42
|
|||
---|---|---|---|
|
|||
Можно ли сделать join только с уникальными значениями EAV? |
|||
#18+
Alibek B., либо нормализуйте в отдельную таблицу, либо хотя бы матвьюху создайте, ну или на худой конец функциональный индекс а-ля decode(attr,'phone',regexp_replace(...))) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.05.2020, 12:53
|
|||
---|---|---|---|
Можно ли сделать join только с уникальными значениями EAV? |
|||
#18+
В отдельную таблицу нормализовать затруднительно по историческим причинам — пометки используются давно и в разных сценариях. Скорее при необходимости лучше будет не обрабатывать (пропускать) записи с пометками. Про матвью я думал, но не знаю, как грамотно сделать для него автообновление. REFRESH FAST ON DEMAND WITH ROWID ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.05.2020, 12:55
|
|||
---|---|---|---|
|
|||
Можно ли сделать join только с уникальными значениями EAV? |
|||
#18+
Alibek B., как часто вы собираетесь выполнять сопоставление и какие у процесса требования по производительности? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.05.2020, 14:03
|
|||
---|---|---|---|
Можно ли сделать join только с уникальными значениями EAV? |
|||
#18+
Сейчас пока речь идет о запуска скрипта вручную, поэтому требований к производительности нет. Но позже я планирую делать такие сопоставления примерно около сотни раз в час, время ответа должно быть не более секунды (чем меньше, тем лучше). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=52&mobile=1&tid=1881283]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
91ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 286ms |
total: | 469ms |
0 / 0 |