Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
Посетитель, потому что такое поведение нелогично с точки зрения логики и с точки зрения реляционной теории, и не очевидно. Знать наизусть всю документацию нереально. А конструкция не выдает ошибки. Как с теми же переменными, которые ругаются, когда пытаешься присвоить им несколько значений. По той же логике, по сути мы обновляем запись в целевой таблице некой "переменной", которая приняла в операции UPDATE значение, прочитанное из другой таблицы. Сугубо имхо))). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 16:10 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
Ёжик25Посетитель, потому что такое поведение нелогично с точки зрения логики и с точки зрения реляционной теории, и не очевидно. Знать наизусть всю документацию нереально. А конструкция не выдает ошибки. Как с теми же переменными, которые ругаются, когда пытаешься присвоить им несколько значений. По той же логике, по сути мы обновляем запись в целевой таблице некой "переменной", которая приняла в операции UPDATE значение, прочитанное из другой таблицы. Сугубо имхо))).Если написать SELECT @V=V FROM T, то SELECT может вернуть хоть миллиард записей, - присвоится последнее (я, кажется, это уже говорил). А вот если SET @V=(SELECT V FROM T)то SELECT в скобках обязан вернуть не более одного значения, ибо это скалярное выражение. Иначе обругается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 16:16 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
iapЁжик25Посетитель, потому что такое поведение нелогично с точки зрения логики и с точки зрения реляционной теории, и не очевидно. Знать наизусть всю документацию нереально. А конструкция не выдает ошибки. Как с теми же переменными, которые ругаются, когда пытаешься присвоить им несколько значений. По той же логике, по сути мы обновляем запись в целевой таблице некой "переменной", которая приняла в операции UPDATE значение, прочитанное из другой таблицы. Сугубо имхо))).Если написать SELECT @V=V FROM T, то SELECT может вернуть хоть миллиард записей, - присвоится последнее (я, кажется, это уже говорил). А вот если SET @V=(SELECT V FROM T)то SELECT в скобках обязан вернуть не более одного значения, ибо это скалярное выражение. Иначе обругается. Забавно, а вот PG присваивает первое значение при SELECT @V=V FROM T. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2019, 16:44 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
Ёжик25, может еще и так быть Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Результаты: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2019, 08:54 |
|
||
|
UPDATE FROM обновляет по первому значению результата джойна
|
|||
|---|---|---|---|
|
#18+
Ёжик25потому что такое поведение нелогично с точки зрения логики и с точки зрения реляционной теории, и не очевидно. Знать наизусть всю документацию нереально. А конструкция не выдает ошибки.Да, наверное, с точки зрения чистой теории это неправильно. Но так было сделано во всех без исключения реализациях SQL, наверное, потому, что UPDATE с джойнами часто даёт повторяющиеся значения, и генерить ошибку было бы непрактично. Поэтому сделали обновление случайной записью. То есть это теоретически неправильно, но вполне логично. Тем более, не забывайте, когда это было сделано - в 70-е, 80-е. Вспомните, что такое SQL, и зачем он появился. Тогда же, например, придумали понятие "владелец объекта", что бы 2 бухгалтера, набирая запросы в SQL для составления ведомости на зарплату, или сведения квартального баланса, не мешали друг другу. А MERGE, или скалярный подзапрос, или присвоегие переменной в SET, придумали намного позже, это более сложные конструкции, они расчитаны на программистов, а не бухгалтеров, и они более строгие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2019, 09:07 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39813683&tid=1687840]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 368ms |

| 0 / 0 |
