|
|
|
LI-T3.0.0.31037: merge допускает дубликаты при наличии when NOT matched
|
|||
|---|---|---|---|
|
#18+
hi all DDL: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Test: Код: plaintext 1. 2. 3. 4. 5. 6. 7. А теперь смотрим на содержимое таблицы `tgt`. Результат на LI-V6.3.3.26744 (правильный; вроде бы... ;-) ):IDP3name similar to %aaa% or name similar to %bbb%4name similar to %bbb% or name similar to %aaa% Результат на LI-T3.0.0.31037:IDP1name similar to %aaa% or name similar to %bbb%2name similar to %bbb% or name similar to %aaa%3name similar to %bbb% or name similar to %aaa%4name similar to %aaa% or name similar to %bbb% Наличие / отсутствие индекса tgt_p на погоду не влияет. Равно как и замена в источнике left join'a на inner или right. Что-то в 3.0.х поломалось в борьбе за стабильный курсор ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 22:41:22 |
|
||
|
LI-T3.0.0.31037: merge допускает дубликаты при наличии when NOT matched
|
|||
|---|---|---|---|
|
#18+
ТаблоидРезультат на LI-V6.3.3.26744 (правильный; вроде бы... ;-)): я бы так не сказал он был бы правильный если бы ID были 1 и 2, а не 3 и 4 в тройке похоже что это действительно связано с исправлением стабильности курсора. Но здесь скорее ошибка заключается в том, что merge не послал тебя из за того что под условие соединения подпадает более 1 записи, чего требует стандарт http://en.wikipedia.org/wiki/Merge_(SQL) Firebird supports MERGE INTO though fails to throw an error when there are multiple Source data rows. Additionally there is a single-row version, UPDATE OR INSERT INTO tablename (columns) VALUES (values) [MATCHING (columns)], but the latter does not give you the option to take different actions on insert versus update (e.g. setting a new sequence value only for new rows, not for existing ones.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 23:10:21 |
|
||
|
LI-T3.0.0.31037: merge допускает дубликаты при наличии when NOT matched
|
|||
|---|---|---|---|
|
#18+
Симонов Денисскорее ошибка заключается в том, что merge не послал тебя из за того что под условие соединения подпадает более 1 записи, чего требует стандартСогласен. Он должен был отвалиться с ошибкой при таком раскладе. Кстати, когда индекс на 'tgt' уникальный, то merge в этом примере вывалит ошибку нарушения unique-индекса. Именно из-за неё я и начал раскопки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 23:16:33 |
|
||
|
LI-T3.0.0.31037: merge допускает дубликаты при наличии when NOT matched
|
|||
|---|---|---|---|
|
#18+
Тьфу, был же пример уже, недавно совсем. Спать пора. ЗЫ. Но таки merge допилить бы надо, чтобы он ошибку вываливал в таких случаях... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 23:19:43 |
|
||
|
LI-T3.0.0.31037: merge допускает дубликаты при наличии when NOT matched
|
|||
|---|---|---|---|
|
#18+
ТаблоидРезультат на LI-V6.3.3.26744 (правильный; /вроде бы... ;-)/): Почему это он правильный? Результат запроса в USING - четыре строки. Таблица tgt - пустая, следовательно в результате в ней должны оказаться все эти четыре строки. Как, по какой логике там могло быть меньше? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2014, 23:23:11 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38611890&tid=1563714]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
173ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 500ms |

| 0 / 0 |
