SQL Set операции и где пункт - PullRequest
0 голосов
/ 16 июля 2010

Возможно ли иметь такой запрос (я получаю сообщение об ошибке):

SELECT ColumnA FROM Table1
EXCEPT
SELECT ColumnB FROM Table2
WHERE Table1.ColumnC = Table2.ColumnC

SQL не может связать Table1.colmnC в моем предложении where. Есть ли способ выполнить этот запрос? или другой способ получить такой же результат? Я знаю, что могу сделать это с помощью временных таблиц или ... но я хочу сделать это с помощью операции set.

спасибо

Ответы [ 3 ]

1 голос
/ 16 июля 2010

первый взгляд:

SELECT ColumnA FROM Table1
WHERE
    NOT EXISTS (SELECT * FROM Table2 WHERE Table1.ColumnC = Table2.ColumnC)

Тем не менее, я думаю, это то, что вы хотите исключить значения столбца B из значений columnA, где columnC соответствует столбцам A и B:

SELECT ColumnA FROM Table1
WHERE
   NOT EXISTS (
      SELECT * FROM Table2
      WHERE Table1.ColumnC = Table2.ColumnC AND Table1.ColumnA = Table2.ColumnB)
0 голосов
/ 16 июля 2010

Чтобы просто исправить ошибку для вашего запроса, следует выполнить следующее, если типы данных ColumnA и ColumnB совпадают.

SELECT ColumnA FROM Table1
EXCEPT
SELECT ColumnB FROM Table2

Except сравнивает наборы результатов. Нет концепции объединения результирующих наборов в какой-либо столбец.

0 голосов
/ 16 июля 2010

То, что вы делаете, это

(SELECT ColumnA FROM Table1)
EXECPT 
(SELECT ColumnB FROM Table2
 WHERE Table1.ColumnC = Table2.ColumnC)

Скобки показывают, почему это не работает.

Я немного озадачен тем, что вы пытаетесь достичь.

Это все в ColumnA из Table1, где ColumnA отсутствует в Table2.ColumnB и Table1.ColumnC равно Table2.ColumnC?

SELECT ColumnA FROM Table
WHERE EXISTS (SELECT * FROM Table2 
              WHERE Table1.ColumnC = Table2.ColumnC
              AND Table1.ColumnA <> Table2.ColumnB)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...