2010-08-30 197 views
0

筛选我有一个查询,看起来像这样:SQL凡在嵌套查询

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 

的问题是,最后一行。 它告诉我,c是一个无效的列名称。同样使用y.c也是如此。 我需要不插入那些巨大的内部查询为空的行,因为tblX不能在那里接受空值。我觉得我应该能够在该列上进行过滤,但我无法完全理解语法。

+0

编辑声明以更好地显示目的。 Y和Z都与A有关.A有许多Z和许多Y.我正在创建并填充一个新表以使Y成为Z的子项。我将所有现有的Y添加到其关联的A的第一个Z中,但是如果A没有Z,我只是忽略Y. – captncraig 2010-08-30 17:31:09

+2

这只是使用只是字母混淆,呵呵。 – captncraig 2010-08-30 17:31:55

回答

0

结果工作是双重嵌套查询。

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

您可能需要对此查询进行双重嵌套。

而且,取决于你的DBMS,但你应该使用两个表没有参加被检查C IS NOT NULL

。如果你告诉我们你想达到的目标,我们可以提供更好的帮助。

+0

工程就像一个魅力。谢谢! – captncraig 2010-08-30 17:20:24

+0

嗯。不太清楚这意味着什么。编辑问题澄清。 – captncraig 2010-08-30 17:35:17

+0

@CaptnCraig:RE:''像一个魅力一样工作,谢谢!''这个问题是否应答? – 2010-08-31 16:56:06