|
|
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
Приветствую всех! Ребят не поможете советом. Имеется следующий запрос, приведенный ниже. В нем есть часть кода для создания вычислительных полей, которая используется многократно (расчет числа дней между двумя датами). Вопрос в следующем, можно ли как то в запросе объявить переменную, и в последующем её использовать для создания задания формулы вычислительных полей? (такой вариант существенно облегчит написание в моем случае кода вычислительных полей). Заранее спасибо за ответ! Код: 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. 34. 35. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 21:15:57 |
|
||
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
Часть запроса, которая производит "базовые" вычисления, уберите в подзапрос. Переменными делать желаемое не рекомендую, т.к. (насколько я помню) в секции SELECT порядок вычисления выражений не гарантирован. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 21:24:27 |
|
||
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
miksoft, ... но пока соблюдается. Чего уже нельзя сказать об остальных частях. Завязываться на порядок (даже вычислений переменных) в sql надо ваще с большой опаской. Я бы так сказал. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 08:44:03 |
|
||
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
Arhat109... но пока соблюдается.Могу ошибаться, но вроде бы на форуме были вопросы со странными глюками, которые по симптомам были похожи на неверный порядок вычисления переменных в секции SELECT. Вылечилось именно переходом к подзапросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 12:15:46 |
|
||
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
miksoft, не знаю, но я не сталкивался и, насколько помню код (смотрел года полтора назад и поверхностно), то там вроде как нечему переставлять порядок, разве что подзапросы в селекте, но после попадалова на глюк (писал тут давненько - окончательно так и не понял в чём было дело) - стараюсь их не использовать в этой части. Вот секция where ... В целом - соглашусь, что если можно ввести подзапрос, то лучше с ним чем без него. Особенно если в нем можно существенно ограничить выборку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 13:51:11 |
|
||
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
Спасибо за подсказку! miksoft а на примере показать не можете? Что собой будет представлять данный подзапрос, содержащий в себе эти базовые вычисления? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2014, 19:49:31 |
|
||
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
miksoftArhat109... но пока соблюдается.Могу ошибаться, но вроде бы на форуме были вопросы со странными глюками, которые по симптомам были похожи на неверный порядок вычисления переменных в секции SELECT. Вылечилось именно переходом к подзапросу. на моей памяти -- никто никогда не показал непоследовательного порядка вычисления в SELEСT секции. В литературе и на форуме многие отмечали что по ГОСТУ СКЛ стандарту порядок не определен и MYSQL это не обешает. Но дефакто порядок держится, и я лично это использую годами и не видел ни единого сбоя. Совершено другое -- порядок вычисления WHERE секции, там это вообше нельзя делать ибо показаны несколько случаев что наличие или отсутсвие индекса менят и порядок вычисления рекордов и порядок вычисления отдельных условий. Т.е. в WHERE вообше переменные использовать запрешено (кроме bochkov-у) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2014, 07:52:58 |
|
||
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
javajdbc, подправлю чуток: ... использовать - можно и в секции "вера"... вычислять опасно (не всё "можно"), и порядок вычислений задавать явно через least(), greatest(). Ну и ещё надо помнить, что секция "Веры" может отрабатывать в запросе столько раз ... сколько имеем соединений, а то и по 2 на каждое! Может получиться повторное вычисление или "дороговастенько". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2014, 08:25:20 |
|
||
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
alex_kos_82, А что бы тебе не использовать для хранения полей, которые потом будут многократно использоваться, таблицы с временными данными вместо переменных? Такая светлая мысль не приходила тебе в голову? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2014, 09:06:53 |
|
||
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
MasterZiv спасибо за идею. Но получается что предварительно для каждой записи необходимо будет выполнять обновление этих временных данных. А это уже мне кажется лишние операции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2014, 14:00:06 |
|
||
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
alex_kos_82Спасибо за подсказку! miksoft а на примере показать не можете? Что собой будет представлять данный подзапрос, содержащий в себе эти базовые вычисления? Код: 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. 34. 35. 36. В скобках мог напутать, но идея, надеюсь, ясна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2014, 14:12:23 |
|
||
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
alex_kos_82MasterZiv спасибо за идею. Но получается что предварительно для каждой записи необходимо будет выполнять обновление этих временных данных. А это уже мне кажется лишние операции. Это дешево. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2014, 18:42:03 |
|
||
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
Имеется следующий запрос, приведенный ниже. В нем есть часть кода для создания вычислительных полей, которая используется многократно (расчет числа дней между двумя датами). Вопрос в следующем, можно ли как то в запросе объявить переменную, и в последующем её использовать для создания задания формулы вычислительных полей? Благодаря товарищам, предлагающим использовать переменные, я никогда н читал твой запрос. Теперь прочитал. То, что тебе нужно, называется VIEW. Ты один раз его напишешь, потом будет пользоваться, даже в разных запросах. Только учти одну вещь: в запросах с использованием этого view в фильтрах и join нельзя будет использовать эти выставляемые поля, их можно только использовать в списке вывода или для других полей с выражениями на из основе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2014, 08:30:43 |
|
||
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
Ещё подошло бы CTE для этого, но mySQL его не умеет. Альтернатива — derived table, он же inline view, — т.е. подзапос во FROM, как уже указал miksoft. Это все на случай если нужно это только в одном запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2014, 08:45:47 |
|
||
|
объявление переменной в SQL-запросе
|
|||
|---|---|---|---|
|
#18+
Модератор: Закончили ругаться? зачищаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 14:24:31 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38569556&tid=1835179]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 396ms |

| 0 / 0 |
