2010-07-16 4 views
0

Est-il possible d'avoir une requête comme ceci (je reçois l'erreur):sql régler le fonctionnement et la clause where

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

SQL ne peut pas lier le Table1.colmnC dans ma clause where. est-il possible d'exécuter cette requête? ou d'une autre façon d'obtenir le même résultat? Je sais que je peux le faire en utilisant des tables temporaires ou ... mais je veux le faire avec une opération de réglage.

grâce

Répondre

1

premier coup d'œil:

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

Cependant, je pense qu'il est ce que vous voulez exclure les valeurs de la colonne B à partir des valeurs COLUMNA, où les matches ColumnC columnsA et B:

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

Ce que vous faites est

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

Les parenthèses montrent pourquoi cela ne fonctionne pas.

Je suis un peu confus quant à ce que vous essayez d'atteindre.

Est-ce que tout est dans la ColonneA de Table1 où ColumnA n'est pas dans Table2.ColumnB et Table1.ColumnC est égal à Table2.ColumnC?

SELECT ColumnA FROM Table 
WHERE EXISTS (SELECT * FROM Table2 
       WHERE Table1.ColumnC = Table2.ColumnC 
       AND Table1.ColumnA <> Table2.ColumnB) 
0

Pour simplement corriger l'erreur de votre requête, à la suite devrait fonctionner correctement si les types de données de ColumnA et ColumnB sont les mêmes.

SELECT ColumnA FROM Table1 
EXCEPT 
SELECT ColumnB FROM Table2 

Except compare les resultsets. Il n'y a pas de concept de joindre les résultats sur une colonne.