Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > SQL запрос


Автор: simanyay 3.1.2003, 03:00
Привет. Я тут делаю небольшую базу в MS Access и столкнулся с вот такой проблемой - я написал мелкий запрос:

SELECT name
FROM t_tests
WHERE teacher IN
                     (
                        SELECT name
                        FROM t_users
                        WHERE login = "anton" // Логин Антон лишь образно. Он будет
                     );                               // определятся пользователем

Так вот, выходит ошибка, типа несоответствия типов. В Oracle (8i) всё проходит, а вот в Access :( Я в базах пока новичок и вот прошу совета более опытных товарищей.
P.S. Пробовал ставить вместо IN = тоже самое получается :(
P.S.P.S. Когда тоже стану "опытным товарищем" обещаю помогать новичкам :)

Автор: simanyay 3.1.2003, 03:02
Упс... я перепутал комментарии из С. Кстати, а есть в SQL коментарии?

Автор: Vit 3.1.2003, 06:07
Вроде формально всё правильно. 2 замечания:

1) Двойные кавычки иногда надо заменять одинарными
2) Коментарии в SQL обычно:

-- Это строковый комментарий

/*
Это блок коментариев
*/

Но это зависит от диалекта SQL - иногда могут быть и другие форматы или эти не поддерживаться.

Автор: AntonSaburov 4.1.2003, 22:38
Надо посмотреть, что за типы
TEACHER в таблице t_test
NAME в таблице t_users

Насколько они совместимы ?

Хотя может быть все из-за убогости самого MS Access - он очень упрощенный - а на убогих как известно ... :)

Но по идее все правильно написано.

Автор: simanyay 5.1.2003, 05:07
И всё таки это была убогость Access. Потом я создал этот же запрос визуально, т.е. с помощью мастера (до этого я всё писал вручную - недолюбливаю чрезмерную визуальность) и всё прокатило, хотя запрос был на 100% одинаковый. Вот так. Ну всё равно спасибо, что помогли.

Автор: U-gene 5.1.2003, 18:19
Что-то с трудом вериться :). За мои 8 лет возни с Акцессом он показал себя очень неплохо. Да! в начале, я тоже часто находил "глюки", но потом оказывалось, что это глюки в моем знании предмета.

Почему мне кажется, что беда не в Акцессе? Да потому, что результатом работы визуального конструктора является SQL-выражение, которое потом выплняется ядром MS Jet. Из визуального конструктора запросов (и из ручного тоже)в ядро передается ТОЛЬКО SQL-выражение, и ничто другое. Поэтому, когда Вы говорите, что запрос, сделанный в визуальном конструкторе, "точно такой-же" как и запрос введенный вручную, но первый работает, а второй - нет, то я сильно сомеваюсь - значит он точно не "точно такой же" и содержит ошибки.

:) Хотя чего не бывает? Может я ошибаюсь и это дествительно глюк.

Автор: Medved 6.1.2003, 01:46
AntonSaburov правильон сказал, если возникает ошибка несоответствия типов, то смотри:

что за типы
TEACHER в таблице t_test
NAME в таблице t_users

Насколько они совместимы ?

Автор: Oleg 11.1.2003, 03:31
А может быть при использовании визуальных средств Аксес включает автоконвертеры типов котроые устанавливают равновесие. Но ты на всякий случай сравни SQL, полученный и бывший. Даже точечки и запятые. За это я Access и ненавижу.

Автор: Гость_konstantin 13.11.2005, 15:32
SELECT name
FROM t_tests
WHERE teacher IN
(
SELECT name
FROM t_users
WHERE login = "anton" // Логин Антон лишь образно. Он будет
); // определятся пользователем



Не правильно написан модуль - в предложении WHERE внешнего запроса имя столбца должно быть одинаковым с именем столбца после SELECT внутреннего запроса. Вместо teacher - name.Такой модуль как сейчас не будет работать нигде.Нет связи между запросами и Access ругается - "несоответствие типов полей".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)