2010-08-30 7 views
0

J'ai une requête qui ressemble à ceci:SQL Où filtrer sur-requête

Insert Into tblX (a,b,c) 
Select x as a, y as b 
    (select top 1 whatever from tblZ as z where z.aID = y.aID order by z.s desc) as c 
from tblY as y 
where y.foo = 'bar' 
AND c <> NULL 

Le problème est que la dernière ligne. Il me dit que c est un nom de colonne invalide. utiliser y.c également, au même résultat. Je n'ai pas besoin d'insérer des lignes où cette requête interne géante est nulle, car tblX ne peut pas accepter les valeurs nulles. Je pense que je devrais être en mesure de filtrer sur cette colonne, mais je ne peux pas vraiment obtenir la syntaxe correcte.

+0

Instruction modifiée pour mieux montrer le but. Y et Z ont tous les deux une référence à A. A a beaucoup de Z et beaucoup de Y. Je crée et remplis une nouvelle table pour faire de Y un enfant de Z. J'ajoute tout Y existant au premier Z de son A associé, mais Si A n'a pas de Z, j'ignore les Y. – captncraig

+2

Cest vraiment déroutant en utilisant seulement des lettres, hein. – captncraig

Répondre

0

Ce qui finit par fonctionner est l'imbrication double de la requête.

Insert Into tblX (a,b,c) 
    Select a,b,c from 
    (select x as a, 
      y as b, 
    (select top 1 whatever from tblZ as z where z.aID = y.aID order by z.s desc) as c 
     from tblY as y where y.foo = 'bar') as foobar 
    Where c IS NOT NULL 
2

Vous devrez probablement doubler cette requête.

En outre, dépend de votre SGBD, mais vous devriez vérifier C IS NOT NULL

Vous utilisez deux tables sans jointure. Si vous nous dites ce que vous essayez d'accomplir, nous pouvons mieux vous aider.

+0

Fonctionne comme un charme. Je vous remercie! – captncraig

+0

hmmm. Pas trop sûr de ce que cela signifie. Question éditée pour clarifier. – captncraig

+0

@CaptnCraig: RE: '" Fonctionne comme un charme.Merci! "' Est-ce que cette question est répondue ou non? –