Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вложенный запрос 
V
    Опции темы
umnick
  Дата 8.3.2010, 01:30 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 4.5.2008
Где: Кривой Рог

Репутация: нет
Всего: 0



помогите найти ошибку
Код

SELECT * FROM 
   [SELECT C.D FROM 
       [SELECT kod_of_station as D FROM routes,
            [SELECT name_of_route as B FROM routes WHERE kod_of_station=4]. AS A 
       WHERE name_of_route=A.B GROUP BY kod_of_station]. AS C WHERE (((C.D) Not In
 (SELECT kod_of_station  FROM coordinates WHERE kod_of_station=4)))]


СУБД MS Access 2003
Ошибка синтаксиса в выражении запроса 'kod_of_station]. AS C WHERE (((C.D) Not In
 (SELECT kod_of_station  FROM coordinates WHERE kod_of_station=4)))]'

Это сообщение отредактировал(а) umnick - 8.3.2010, 10:11
PM MAIL   Вверх
Gluttton
Дата 8.3.2010, 03:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Цитата(umnick @  8.3.2010,  01:30 Найти цитируемый пост)
помогите найти ошибку

Потенциальным отвечающим облегчило бы жизнь (а так же увеличило шансы вопрошающего получить вменяемый ответ):
1. Указание СУБД;
2. Указание вида ошибки (логическая, синтаксическая, прочее);
3. Ну о тексте ошибки (если таковое имеется) или же описании сути возникшей проблемы я вообще молчу smile ...

Ну... На общий вопрос, могу дать общий ответ.

1. Настораживают квадратные скобки (никогда не приходилось сталкиваться).
2. Настораживают точки после закрывающей квадратной скобки в подзапросе перед ключевым словом AS.
3. Настораживает применение группировки при отсутствии агрегирующих функций:
Код

        SELECT 
            kod_of_station as D 
        FROM routes, 
        [
            SELECT 
                name_of_route as B 
            FROM routes 
                WHERE kod_of_station=4
        ].  AS A 
            WHERE name_of_route=A.B 
                GROUP BY kod_of_station

4. Сомневаюсь в целесообразности примененного количества скобок:
Код

        WHERE 
        (
            (
                (
                    C.D
                )   Not In 
                (
                    SELECT 
                        kod_of_station  
                    FROM coordinates 
                        WHERE kod_of_station=4
                )
            )
        )

Да и вообще - достаточно всё это можно преобразовать к виду:
Код

        WHERE C.D<>4

5. Код п. 3 пытается вывести во внутреннем подзапросе данные о name_of_route из таблицы routes отобранные по критерию d_of_station=4. Полученные данные (подмножество таблицы routes) декартово перемножается с исходной таблицей во внешнем подзапросе и в нем выбираються данные kod_of_station  smile , которые должны соответствовать отобранным во внутренным подзапросе name_of_route. Т.о. вместо всего приведенного в п. 3 подзапроса можно использовать:
Код

        SELECT
            4
        FROM routes 

6. Кроме того в условии следующего "вверх" по иерархии подзапроса проверяется отсутствие полученных данных в некоторой таблице coordinates по тому же критерии, что и в п. 3.
7. Сомнительна необходимость в самом внешнем запросе:
Код

SELECT 
    * 
FROM  
[

]

8. 

Т.о. отбросив всё, на мой взгляд, лишнее получим примерно такой запрос:
Код

SELECT 
    kod_of_station
FROM routes
    WHERE 4<>4

Который должен выполняться на сервере без ошибок и всегда возвращать пустое множество...

Это сообщение отредактировал(а) Gluttton - 8.3.2010, 03:16


--------------------
Слава Україні!
PM MAIL   Вверх
Gluttton
Дата 8.3.2010, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Цитата(umnick @  8.3.2010,  01:30 Найти цитируемый пост)
Ошибка синтаксиса в выражении запроса 'kod_of_station]. AS C WHERE (((C.D) Not In
 (SELECT kod_of_station  FROM coordinates WHERE kod_of_station=4)))]'

Если не секрет, то какая?


--------------------
Слава Україні!
PM MAIL   Вверх
umnick
  Дата 8.3.2010, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 4.5.2008
Где: Кривой Рог

Репутация: нет
Всего: 0



Спасибо за помощь: заменил квадратные скобки на круглые и убрал точки перед as. Помогло.
PM MAIL   Вверх
Gluttton
Дата 8.3.2010, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Всегда пожалуйста...

Хм... И что этот запрос возвращает, какие то данные?
Странно, я был убежден, что он всегда будт возвращать "ничего"...


--------------------
Слава Україні!
PM MAIL   Вверх
Fortop
Дата 8.3.2010, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 2
Всего: 42



Цитата(Gluttton @  8.3.2010,  02:10 Найти цитируемый пост)
1. Настораживают квадратные скобки (никогда не приходилось сталкиваться).

В MSSQL так выделяются поля, например с пробелами в имени [field with space]


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.