2010-08-30 238 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