|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Здесь Jet ругается, что в Order By указаны поля, которых нет в 1 запросе (имеет ввиду shortStreetName и fullStreetName ) Без ORDER BY всё работает нормально Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Вот этот работает нормально: Код: vbnet 1. 2. 3. 4.
Другая проблема: Вот здесь получаем ошибку: "Несоответствие типов данных в выражении условия отбора" Без ORDER BY всё работает нормально. dic_street.shortName, dic_street.shortName - строки, dic_street.id - число типа Long Код: vbnet 1. 2. 3. 4. 5. 6.
P.S. Первый запрос должен стоять вверху (чисто из принципа). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 09:45 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
И этот работает нормально: авторSELECT TOP 1 "ttttt" AS sort FROM address UNION ALL SELECT "ttttt" FROM address ORDER BY sort Вообще у меня туева хуча запросов в коде, где в первом объединяемом запросе указываю псевдоним, а в конце выполняю по нему сортировку (ORDER BY имяПсевдонима). Никогда таких проблем не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 09:48 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Вот ещё один простенький запрос. Если оставить "TOP 1", получаем ошибку "Несоответствие типов данных в выражении условия отбора". Если убрать TOP 1, всё работает нормально. Код: vbnet 1. 2. 3. 4. 5. 6.
Снова Access в топку ? Или есть разумное объяснение ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 10:28 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Вот ещё один запрос. Получаем ошибку, что в ORDER BY указаны поля, отсутствующие в первом запросе. Код: vbnet 1. 2. 3. 4. 5. 6.
Последние 2 запроса моделируют обе сабжевые проблемы. И связаны последние 2 запроса только с таблицей msysobjects. Так что можете проверить в любой базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 10:39 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Cyrax_02, Попробуй как подзапрос оформить: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 10:48 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Ну, если поменять запросы местами или заключить во внешний запрос, возможно начнёт работать. Только вот я хочу понять, почему не работает в исходной конструкции. Методом тыка не программируют. Если так постоянно "пробовать", то весь процесс превратится не в процесс разработки, а в еб...ню конкретную. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 11:08 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Cyrax_02, Попытаюсь объяснить, почему это не работает: Если делать, без подзапроса, то получается что ты пытаешься проверить на NULL и значения, алиасы, которые еще не являются полем со значением. Ведь можно написать и так: Код: sql 1. 2. 3. 4. 5. 6.
Тут же не будешь проверять ORDER BY IIF(2 IS NULL, 1 + 1, 1 + 2) ASC А если оформляешь все это в подзапрос, то уже будет проверяться значения столбца подзапроса, т.е. это уже не алиас. По этой причине такая конструкция не будет работать и в других СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 11:29 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Leran2002Cyrax_02, Попытаюсь объяснить, почему это не работает: Если делать, без подзапроса, то получается что ты пытаешься проверить на NULL и значения, алиасы, которые еще не являются полем со значением. Ведь можно написать и так: Код: sql 1. 2. 3. 4. 5. 6.
Тут же не будешь проверять ORDER BY IIF(2 IS NULL, 1 + 1, 1 + 2) ASC А если оформляешь все это в подзапрос, то уже будет проверяться значения столбца подзапроса, т.е. это уже не алиас. По этой причине такая конструкция не будет работать и в других СУБД. Псевдонимы, указанные в первом запросе, распространяют своё действие на всё результирующее множество. ORDER BY, указанный в самом конце, тоже распространяет своё действие на всё результирующее множество. Следовательно, по правилам приличия ORDER BY должен придерживаться одной из следующих логик: Либо в ORDER BY должны быть "видны" только собственные имена полей из 1-го запроса и НЕ должны быть "видны" псевдонимы Либо в ORDER BY должны быть "видны" имена полей из 1-го запроса, у которых нет псевдонимов, и псевдонимы (при наличии). Если поле имеет псевдоним, то собственное имя не "видно", а псевдоним поля - "виден". Какой логики придерживается Jet ? А никакой. Шалтай-балтай, блин. В случае с единственным запросом - работает логика №2. В случае с 2 и более запросами, объединёнными с помощью UNION, - логика №1. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 12:36 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
авторПо этой причине такая конструкция не будет работать и в других СУБД. И даже в MySQL ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 12:37 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Cyrax_02, Да, но здесь вы обращаетесь к псевдониму чтобы сказать что нужно сортировать по этой колонке: Код: sql 1. 2.
Что по сути эквивалентно: Код: sql 1. 2.
А здесь вы пытаетесь производить с ним операции, что недопустимо: Код: sql 1. 2.
Разница ведь есть? авторИ даже в MySQL ??? Специально для вас проверил, не работает: Код: sql 1. 2. 3. 4.
А так работает: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Понятно? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 12:47 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
А разве нельзя выполнять в ORDER BY операции ? У меня куча таких запросов в программе, где я сортирую ORDER BY IIF(...) ASC - никаких проблем нет. Т.е. операции в ORDER BY выполнять можно. Но при наличии UNION Jet почему-то начинает лажать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 17:43 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Так что пока 1:0 в мою пользу )) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 17:44 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Cyrax_02А разве нельзя выполнять в ORDER BY операции ? Можно, но не над алиасами. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 18:44 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
ok, резюме будет таким: в ORDER BY недопустимы операции над псевдонимами Осталось объяснить вот это поведение: Cyrax_02Вот ещё один простенький запрос. Если оставить "TOP 1", получаем ошибку "Несоответствие типов данных в выражении условия отбора". Если убрать TOP 1, всё работает нормально. Код: vbnet 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 19:57 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Cyrax_02, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 20:58 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА , в Вашем варианте в выражении IIF вместо shortStreetName нужно поставить dic_street.shortName , вместо fullStreetName - dic_street.fullName . Тогда заработает. И во втором объединяемом запросе "as w1" можно убрать. Вообще, переделать запрос так, чтобы он работал - не проблема. Можно сортировку вынести во внешний запрос, можно условие добавить как дополнительное поле и сортировать по нему (как в Вашем варианте). Только мне не это нужно. По факту, как оказалось, мне вообще не нужен ORDER BY в этом запросе. Собственно, нужно толково объяснить вот это поведение: Cyrax_02Вот ещё один простенький запрос. Если оставить "TOP 1", получаем ошибку "Несоответствие типов данных в выражении условия отбора". Если убрать TOP 1, всё работает нормально. Код: vbnet 1. 2. 3. 4. 5. 6.
Здесь в предложении ORDER BY выражение не используется, тем не менее, получаем ошибку. Ошибки не будет, если выполнить одно из следующих действий: 1. если убрать "TOP 1" 2. если вместо "ORDER BY rrr" указать "ORDER BY 2" 3. если вместо "ORDER BY rrr" указать "ORDER BY ttt" Забавно ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 23:31 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Ну чем ttt лучше rrr ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 23:52 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Cyrax_02, ttt - некая закономерность... мож пойдешь поспишь ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2013, 23:59 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Cyrax_02Ну чем ttt лучше rrr ? На какое поле (в инструкции SELECT) в общем случае распространяется действие предиката TOP? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2013, 00:02 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
авторНа какое поле (в инструкции SELECT) в общем случае распространяется действие предиката TOP? TOP относится не к полю, а к инструкции SELECT первого запроса. И действие распространяет на результирующее множество записей, возвращаемое первым запросом. Либо мы из разных миров... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2013, 08:59 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
:) Я ожидал такой реакции. Я к тому, что, ежели просто поменять очередность вывода полей в селекте, Код: sql 1. 2. 3. 4. 5. 6.
то Jet уже не противится сортировке по полю rrr. <пожимая плечами> Наверное, ему хочется первым за TOP 1 видеть поле, по которому будет ORDER BY. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2013, 10:05 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Выходит, Access в топку ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2013, 12:33 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Cyrax_02Выходит, Access в топку ? Если вопрос к сообществу нашего подфорума, то пока подождем хоронить. Лучше уж помучиться (с). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2013, 12:44 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
Cyrax_02Выходит, Access в топку ? Вы, с завидным постоянством, уже длительное время пытаетесь "уличить" Access во всех грехах и закопать. Он (Access-Jet-VBA) ровно такой, какой он есть , со всеми его багофичами. Вот мне, например, не нравятся китайские/индийские/отечественные автомобили, так я на них и не езжу. И не испытываю по этому поводу абсолютно никаких комплексов/дискомфорта. Или взять, к примеру, мотоциклы бренда "Harley-Davidson". И у них тоже есть свои недостатки, например, масло подтекает. И не самые быстрые они, и не самые экономичные, и не самые "передовые" по технологиям. И что? Миллионы людей с удовольствием их покупают, катаются, гордятся ими, и довольны как слоны. :) Ну уж если он вам так не мил, какого лешего вы мучаете его и себя? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2013, 13:13 |
|
Волшебный запрос
|
|||
---|---|---|---|
#18+
авторok, резюме будет таким: в ORDER BY недопустимы операции над псевдонимами Здесь не только это: 1. Использование в ORDER BY псевдонимов допускается только в объединённых запросах (при использовании UNION) 2. Использование в ORDER BY операций над псевдонимами НЕ допускается ни в каких запросах ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 17:12 |
|
|
start [/forum/topic.php?fid=45&msg=38341153&tid=1619123]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 300ms |
total: | 426ms |
0 / 0 |