проблема с операцией пересечения в запросе sql - PullRequest
0 голосов
/ 02 июня 2010

Я написал следующий запрос, я думаю, что он правильный, но у меня ошибка «отсутствует оператор».

SELECT * FROM results,Types WHERE results.a=Types.b  
INTERSECT  SELECT * FROM results,Types WHERE results.c=Types.b

Может ли кто-нибудь помочь мне, пожалуйста?

Большое спасибо.

Ответы [ 4 ]

3 голосов
/ 02 июня 2010

Какую базу данных вы используете? Вы уверены, что intersect поддерживается? Я попробовал ваш запрос в Oracle (изменив имена таблиц на что-то, соответствующее моей БД), и он работал нормально.

EDIT: Поскольку вы подтвердили, что используете MS-Access, то ясно, что INTERSECT является проблемой, поскольку он не поддерживается с MS-Access: http://www.access -programmers.co.uk / forums / archive / index.php / t- 86531.html

EDIT2: Это не проверено, но основная идея заключается в том, что вам нужно найти все строки в вашем первом запросе, которые существуют во втором запросе. Для этого вам нужно будет сравнить каждый столбец между двумя запросами на совпадение, так как все столбцы должны совпадать, чтобы он был «пересекающейся» строкой.

Возможны некоторые проблемы с синтаксисом, но, надеюсь, это поможет вам начать работу.

SELECT r.col1
     , t.col1
     /* list all other columns here */
  FROM results r
     , types t
 WHERE r.a = t.b
 AND EXISTS (
     SELECT *
       FROM results r2
          , types   t2
      WHERE r2.c = t2.b
        AND NZ(r.col1,0) = NZ(r2.col1,0)
        AND NZ(t.col1,0) = NZ(t2.col1,0)
        /* list other columns here, they all need to match so intersection will work */
 )
2 голосов
/ 02 июня 2010

Я бы предложил протестировать каждое из SELECT утверждений отдельно. Убедитесь, что они работают сами по себе. Затем выполните INTERSECT.

Например, если вы работаете с SQL Server, это неправильный способ ссылки на две таблицы. Вам необходимо добавить предложение JOINON, указывающим столбцы для JOIN).

Даже если это не SQL Server, вам нужно убедиться, что каждый запрос работает самостоятельно.

Редактировать: Кто-то еще спрашивал здесь о Как я могу реализовать операции SQL INTERSECT и MINUS в MS Access . Я вижу разницу во мнениях, поэтому обязательно проверьте свои результаты, чтобы убедиться, что вы получаете то, что хотите.

2 голосов
/ 02 июня 2010

Возможно, не-ANSI объединяет вопросы

SELECT * FROM results R JOIN Types T ON R.a = T.b  
INTERSECT
SELECT * FROM results R JOIN Types T ON R.c = T.b 
0 голосов
/ 25 июля 2014

Используйте оператор INTERSECT, только если вы хотите найти общую строку, производимую отдельными запросами. Вы заявили:

"ВЫБРАТЬ * ИЗ РЕЗУЛЬТАТОВ, Типы, ГДЕ результаты. INTERSECT SELECT * FROM результатов, Типы ГДЕ results.c = Types.b "

не соответствуют критериям, необходимым для работы соединения. Предложение "WHERE" создает проблему.

Если results.a <> results.c: than u ... нечего пересекать.

...