|
Уникальный индекс с пустым значением
|
|||
---|---|---|---|
#18+
Есть уникальный индекс из нескольких свойств IndexAka. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Если например, группа не указана (goodsGroup), то выражение Код: sql 1. 2. 3.
не обновляет уже существующую запись, а создает еще одну такую же с пустой группой. Как сделать, чтобы пустое значение тоже участвовало в уникальности? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2019, 15:09 |
|
Уникальный индекс с пустым значением
|
|||
---|---|---|---|
#18+
vassil, Я не совсем понял - ты хочешь чтобы aka было уникальным или триплет (tradingNetwork, goodsGroup, aka)? Как у тебя объявлено - это должно быть одно из 3 уникальное (т.е. триплет уникальный) Кстати Data=aka не имеет смысла если aka в самом индексе ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 05:52 |
|
Уникальный индекс с пустым значением
|
|||
---|---|---|---|
#18+
logist, триплет (tradingNetwork, goodsGroup, aka) чтобы был уникальным. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 15:42 |
|
Уникальный индекс с пустым значением
|
|||
---|---|---|---|
#18+
vassil, мне кажется, плохая практика использовать insert or update без явного указания полей естественного ключа. А ваша ситуация, кажется, из-за этого: INSERT OR UPDATE determines of a record exists by matching UNIQUE KEY field values to the existing data values. If a UNIQUE KEY violation occurs, INSERT OR UPDATE performs an update operation. Note that a UNIQUE KEY field value may not be a value explicitly specified in INSERT OR UPDATE; it may be the result of a column default value or a computed value. https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_insert Т.е. она сначала делает insert, а потом, если он не удался, update. Я, честно говоря, думал, что null участвует в уникальности. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 18:26 |
|
Уникальный индекс с пустым значением
|
|||
---|---|---|---|
#18+
vassil, действительно посмотрел сейчас - пустые поля не участвуют в проверке на уникальность: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_createtable#RSQL_createtable_fconstraints The UNIQUE data constraint specifies that this field accepts only unique values. Thus, no two records can contain the same value for this field. The SQL empty string ('') is considered to be a data value, so with the UNIQUE data constraint applied, no two records can contain an empty string value for this field. A NULL is not considered to be a data value, so the UNIQUE data constraint does not apply to multiple NULLs. To restrict use of NULL for a field, use the NOT NULL keyword constraint. Я думаю что простейший способ обойти это ограничение - сделать вычисляемое поле, которое будет принимать не-пустое значение для пустого goodsGroup Класс: Код: sql 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.
Пример: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2019, 04:20 |
|
Уникальный индекс с пустым значением
|
|||
---|---|---|---|
#18+
Хорошо, спасибо за информацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2019, 05:14 |
|
Уникальный индекс с пустым значением
|
|||
---|---|---|---|
#18+
vassil, пустые значения не контролируются на уникальность на уровне %Save(). можно поставить Type=key, но там свои заморочки, пустое превращается в -1000000000(0), строки пишутся "как есть". обычно пустые значения не допускаются там, где требуется уникальность, так что никто и не влетает. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2019, 11:19 |
|
|
start [/forum/topic.php?fid=39&fpage=4&tid=1556208]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 263ms |
total: | 392ms |
0 / 0 |