|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
Подскажите, как решать такую задачу. Есть дополнительные атрибуты объекта, реализованные с помощью EAV. Например так: itemtypevalueitem1aa11item1bb22item1cc33item2aa11item2bb11item3aa11item3bb11item3cc11item3dd44 Нужно найти дубли сочетаний атрибутов. Например я считаю, что сочетание атрибутов aa+bb должно быть уникальным. В приведенном примере эта уникальность нарушается для item2 и item3. Пока сделал "в лоб", развернул атрибуты в столбцы и сравниваю вложенные запросы: Код: plsql 1. 2. 3. 4. 5.
А можно ли как-то проверять на этапе соединения? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 15:47 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
Alibek B., Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 15:54 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
В смысле, from items having count (distinct type) >=2 ? Так набор атрибутов может быть произвольным, как и их значения. Или как? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 15:55 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
Alibek B.Нужно найти дубли сочетаний атрибутов. Например я считаю, что сочетание атрибутов aa+bb должно быть уникальным. В этом случае выбор EAV был ошибкой проектирования. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 15:57 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
Хорошо, завтра отправлю письмо машиной времени. Но сегодня EAV уже есть, а необходимость проверки на уникальность сочетаний атрибутов появилась недавно. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 16:17 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
Мне непонятна постановка задачи (как и две предыдущих от вас, решение которых затягивалось из-за плохой постановки). Как вы определяете уникальность сочетаний атрибутов, внутри entity или внутри таблицы? Item2 и item3 нарушают уникальность бежду собой, или каждый для себя, потому что у каждого аа.value=bb.value? aa+bb дан как пример из более общего правила, или уникальность определена только для aa+bb? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 16:56 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
Ну или напишите ваш запрос без ошибок. Где по-русски двусмыслица, код поможет донести мыслЮ. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 17:01 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
Alibek B.Но сегодня EAV уже есть, а необходимость проверки на уникальность сочетаний атрибутов появилась недавно. Раз появилась такая необходимость, значит переделывайте структуру, выносите эти два атрибута в обычную таблицу. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 17:26 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
Вот рабочее решение: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Вопрос был в том, можно ли его улучшить. Вариант с having count(distinct value)<>count(value) довольно необычный, нужно обдумать. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 17:29 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
Alibek B. Вариант с having count(distinct value)<>count(value) довольно необычный, нужно обдумать. можно еще так, но тут нет Stax Alibek B., Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
..... stax Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 18:21 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
для любителей извращений чуть посложнее Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 18:40 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
andreymx, судя из 22245082 Alibek B. наверное надо другое для контрактов 100, 220, 221 надо что-то искать, а не для типов аа/ бб ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 18:50 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
Alibek B. Вот рабочее решение: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Вопрос был в том, можно ли его улучшить. Вариант с having count(distinct value)<>count(value) довольно необычный, нужно обдумать. Если выполняются условия, что в таблице BM_CUSTOMER_CONTACT нет строк с value=null, то можно сократить, особо не мудря: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Внутренние джойны уберут необходимость фильтровать по null. Можно разворачивать через pivot (меньше текста), но тогда нужно снова фильтровать null. Общая идея, находит дубли только в таблице EAV. Код: plsql 1. 2. 3. 4. 5. 6. 7.
Тест таблицы, если другие хотят поиграться и улучшить: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 19:11 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
НеофитSQL Можно разворачивать через pivot (меньше текста), но тогда нужно снова фильтровать null. Код: plsql 1. 2. 3. 4. 5. 6. 7.
Добавь в pivot (max(value)) тэг 0 или 1: pivot (max(value||nvl2(value,'0', '1')) тогда cn_attr,cp_attr будут null только при отсутствии записи EAV. в остальных случаях последним символом cn_attr,cp_attr будет 0 или 1, что в group by cn_attr,cp_attr различит value is null их от несуществующего value как поля записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 00:16 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
Попутный комментарий: проверка на нежелательное присутствие null в нескольких колонках довольно частая операция. Если колонки одного типа, я использую Код: plsql 1.
чтобы отфильтровать "все null", и Код: plsql 1.
чтобы отфильтровать "хотя бы один null". Мне это нравится больше, чем повторяющиеся "is not null or" или "is not null and". Обе функции принимают переменное число параметров и наверное эффективны. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 02:16 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
НеофитSQL Общая идея, находит дубли только в таблице EAV. заход с другой стороны Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
возвращает кучей объекты с дублями AV как x так и y. можно набор ключевых атрибутов расширять единообразно. неполный набор A (без x и/или y во всех записях группы) не считает. для группировки или сортировки повторяющихся (x.V, y.V) над E, скорее всего нужен pivot в том или ином виде. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 02:18 |
|
Поиск дублей в EAV
|
|||
---|---|---|---|
#18+
andreymx для любителей извращений чуть посложнее Если я правильно понял, это для контроля уникальности набора атрибутов. А мне нужен контроль уникальности значений набора атрибутов. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 09:52 |
|
|
start [/forum/topic.php?fid=52&msg=40026184&tid=1880624]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 285ms |
total: | 405ms |
0 / 0 |