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