Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Почему такая конструкция работает и не вызывает ошибки? Ведь по условию возвращается 3 значения. Но SQL выбирает "первое". Слово "первое" в кавычках, потому что, как я понимаю, для реляционной таблицы понятия первой записи не имеет смысла. Dопрос в том, по какому принципу происходит выборка одного значения, по которому происходит обновление поля value в таблице #trg. Как мне в коде выше узнать, на какое значение обновляется #trg.value. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 14:56 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
Ёжик25, с чего вы решили что обновляет "первое"? оставляет "последнее" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:01 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
TaPaKоставляет "последнее"И это описано в документации Microsoft ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:11 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
TaPaKоставляет "последнее" А есть какой-то пруф? Просто, как я помню, не "первое" или "последнее" а просто "одно из". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:12 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
iap, что то ничего не нашел, прошу, дайте ссыль, весь интернет уже облазил на эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:18 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
TaPaK, выполните приведенный скрипт и посмотрите результат) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:18 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
msLexTaPaKоставляет "последнее" А есть какой-то пруф? Просто, как я помню, не "первое" или "последнее" а просто "одно из". оно так и будет, предварительно результат не определён, вопрос как будет отсортировано/пересортировано в плане авторUse caution when specifying the FROM clause to provide the criteria for the update operation. The results of an UPDATE statement are undefined if the statement includes a FROM clause that is not specified in such a way that only one value is available for each column occurrence that is updated, that is if the UPDATE statement is not deterministic. F авторвыполните приведенный скрипт и посмотрите результат) нет спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:20 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
TaPaKmsLexпропущено... А есть какой-то пруф? Просто, как я помню, не "первое" или "последнее" а просто "одно из". оно так и будет, предварительно результат не определён, вопрос как будет отсортировано/пересортировано в плане авторUse caution when specifying the FROM clause to provide the criteria for the update operation. The results of an UPDATE statement are undefined if the statement includes a FROM clause that is not specified in such a way that only one value is available for each column occurrence that is updated, that is if the UPDATE statement is not deterministic. F Это я и сам видел, я хотел увидеть какой-то пруф на "последний" с учетом "сортировки" в плане. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:23 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
msLexTaPaKпропущено... оно так и будет, предварительно результат не определён, вопрос как будет отсортировано/пересортировано в плане пропущено... Это я и сам видел, я хотел увидеть какой-то пруф на "последний" с учетом "сортировки" в плане. авторCompute summary values for groups of rows in a suitably sorted stream. расшифровуйте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:24 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
TaPaKавторCompute summary values for groups of rows in a suitably sorted stream. расшифровуйте хмм, это откуда? В справке по update такого нет, поиск в гуле находит только про stream aggregate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:31 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
msLexTaPaKпропущено... оно так и будет, предварительно результат не определён, вопрос как будет отсортировано/пересортировано в плане пропущено... Это я и сам видел, я хотел увидеть какой-то пруф на "последний" с учетом "сортировки" в плане. как я понял, из за такой "недетерминированности" мы не можем абсолютно точно сказать, каким значением из нескольких будет обновлена запись, и следует в таком случае вводить дополнительную логику, row_count какой нибудь, или времянку с отсортированными значениями из таблицы-источника? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:31 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
msLexTaPaKпропущено... расшифровуйте хмм, это откуда? В справке по update такого нет, поиск в гуле находит только про stream aggregate. это тот оператор которое "это" делает. На самом деле вопрос бессмысленный, правильней ответ "не определён" заранее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:32 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
Ёжик25msLexпропущено... Это я и сам видел, я хотел увидеть какой-то пруф на "последний" с учетом "сортировки" в плане. как я понял, из за такой "недетерминированности" мы не можем абсолютно точно сказать, каким значением из нескольких будет обновлена запись, и следует в таком случае вводить дополнительную логику, row_count какой нибудь, или времянку с отсортированными значениями из таблицы-источника? из-за такой недетерменированности, лучше вообще избегать подобных апдейтов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:32 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
Ёжик25msLexпропущено... Это я и сам видел, я хотел увидеть какой-то пруф на "последний" с учетом "сортировки" в плане. как я понял, из за такой "недетерминированности" мы не можем абсолютно точно сказать, каким значением из нескольких будет обновлена запись, и следует в таком случае вводить дополнительную логику, row_count какой нибудь, или времянку с отсортированными значениями из таблицы-источника? пусть sql угадывает какое же значение ты хотел получить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:33 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
msLexЁжик25пропущено... как я понял, из за такой "недетерминированности" мы не можем абсолютно точно сказать, каким значением из нескольких будет обновлена запись, и следует в таком случае вводить дополнительную логику, row_count какой нибудь, или времянку с отсортированными значениями из таблицы-источника? из-за такой недетерменированности, лучше вообще избегать подобных апдейтов. Вообще все началось с того, что я пытаюсь из SQL в Postgresql засунуть логику MERGE, которая, кстати, ругается на несколько результирующих значений и не работает. Пока только через вот такую конструкцию получилось: WITH cte ( update target from source ...returning ...)insert ...select ...from source left join cte on ...where cte ... is null ну и вот столкнулся с такой "недетерминированностью" операции UPDATE. Что ж, придется вводить таки дополнительную логику. Всех благодарю. Вопрос закрыт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:39 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
TaPaKэто тот оператор которое "это" делает. "это" вполне может делать и hash aggregate ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:41 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
Ёжик25Но SQL выбирает "первое". MS как-то не любит распространяться о внутренней кухне, предпочитая просто рассказать про недетерминированность. В доке к MySQL, например, чётко написано - любая запись обновляется только один раз за запрос. Отсюда и "первой записью" - остальные попытки обновления этой же записи игнорятся, ибо "уже было". А уж какая реально будет "первая" - это фиг знает, бо сортировки в подзапросах (без TOP N) тупо игнорятся (а местами так и вовсе запрещены, вроде). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:43 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
msLexTaPaKэто тот оператор которое "это" делает. "это" вполне может делать и hash aggregate а делает stream aпgregate... или вы предлагаете на этапе join выбрасывать всё? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:43 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
Ёжик25iap, что то ничего не нашел, прошу, дайте ссыль, весь интернет уже облазил на эту тему.У меня была неточность: последнее значение присваивается переменной в SELECTе, если он возвращает несколько значений. Код: sql 1. С UPDATE это не связано. Про UPDATE написано следующее: https://docs.microsoft.com/ru-ru/sql/t-sql/queries/update-transact-sql?view=sql-server-2017 Проявляйте осторожность, указывая предложение FROM при задании критериев для операции обновления. Результаты инструкции UPDATE не определены, если инструкция включает предложение FROM, в котором для каждого вхождения обновляемого столбца не задано единственное значение , то есть если инструкция UPDATE не является детерминированной. Например, в инструкции UPDATE следующего скрипта обе строки в Table1 удовлетворяют условиям предложения FROM в инструкции UPDATE, но не определено, какая строка из Table1 используется для обновления строки в Table2 Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:47 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
TaPaKmsLexпропущено... "это" вполне может делать и hash aggregate а делает stream aпgregate... или вы предлагаете на этапе join выбрасывать всё? Еще раз, "это" не обязательно делает stream aggregate, "это" может делаться и SQL сервером и через Hash aggregate с aggrtype any ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:50 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
iap, вообще, конечно, я был очень удивлен такому поведению. Следовало бы, на мой взгляд, возвращать ошибку обновления, как это делается при MERGE. Ну давайте с тем же успехом переменной присваивать "первое" значение из множественного набора результата SELECT. Чего уж там!)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:53 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
Ёжик25iap, вообще, конечно, я был очень удивлен такому поведению. Следовало бы, на мой взгляд, возвращать ошибку обновления, как это делается при MERGE. Ну давайте с тем же успехом переменной присваивать "первое" значение из множественного набора результата SELECT. Чего уж там!)))) Поведение странное, но оно задокументировано, что автомат превращает его (поведение) в фичу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:55 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
Ёжик25iap, вообще, конечно, я был очень удивлен такому поведению. Следовало бы, на мой взгляд, возвращать ошибку обновления, как это делается при MERGE. Ну давайте с тем же успехом переменной присваивать "первое" значение из множественного набора результата SELECT. Чего уж там!)))) напишите свой SQL Server и управляйте его поведением как пожелаете. зачем удивляться тому, что поведение соответствует описанию в документации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 15:57 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
Ёжик25iap, вообще, конечно, я был очень удивлен такому поведению. Следовало бы, на мой взгляд, возвращать ошибку обновления, как это делается при MERGE. Ну давайте с тем же успехом переменной присваивать "первое" значение из множественного набора результата SELECT. Чего уж там!))))Полностью согласен. Правда, UPDATE появился на 200 лет раньше Таких моментов много. Например, во многих случаях необязательно строго придерживаться заявленного стиля даты в функции CONVERT() - сервер сконвертирует даже приблизительно похожую на дату строку. Разве не безобразие? Строгости к нам, балбесам, не хватает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 16:08 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
Ёжик25iap, вообще, конечно, я был очень удивлен такому поведению. Следовало бы, на мой взгляд, возвращать ошибку обновления, как это делается при MERGE. Ну давайте с тем же успехом переменной присваивать "первое" значение из множественного набора результата SELECT. Чего уж там!)))) вперёд в спортлото https://feedback.azure.com/forums/908035-sql-server ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 16:08 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39813654&tid=1687840]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
137ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 485ms |

| 0 / 0 |
