2010-03-12 120 views
0

好的,這是我的原始問題;SQL加入一對多關係

表一個包含

ID|Name 
1 Mary 
2 John 

表二包含

ID|Color 
1 Red 
1 Blue 
2 Blue 
2 Green 
2 Black 

我想結束了是

ID|Name|Red|Blue|Green|Black 
1 Mary Y Y 
2 John  Y  Y  Y 

看來,因爲有顏色的11個獨特的價值觀和在表1的1000條記錄中,沒有「好」的方法來做到這一點。所以,還有其他兩個問題。

有沒有一種有效的方法來查詢以獲得此結果?然後我可以在我的應用程序中創建一個交叉表以獲得所需的結果。

ID|Name|Color 
1 Mary Red 
1 Mary Blue 
2 John Blue 
2 John Green 
2 John Black 

如果我想限制返回記錄的數量我該如何做一個查詢來做這樣的事情?

Where ((color='blue') AND (color<>'red' OR color<>'green')) 

因此,使用上面的例子中我會然後通過ADODB回來

ID|Name|Color 
1 Mary Blue 
2 John Blue 
2 John Black 

我連接到Visual FoxPro表使用SQL。謝謝!

+0

問題是什麼?這不清楚。 – 2010-03-12 20:03:02

回答

0

從你的問題之前,查詢對一個VFP表,你可以通過 給你結果如下VFP資格查詢...交叉完整

select 
     N.ID, 
     N.Name, 
     MAX(IIF(C.Color = "Red", "Y", " ")) Red, 
     MAX(IIF(C.Color = "Blue", "Y", " ")) Blue, 
     MAX(IIF(C.Color = "Green", "Y", " ")) Green, 
     MAX(IIF(C.Color = "Black", "Y", " ")) Black 
    FROM 
     C_Names N, 
     Colors C 
    WHERE 
     N.ID = C.ID 
    GROUP BY 
     N.ID, 
     N.Name 

然後,因爲您有其他「顏色」,只需複製相應顏色的MAX(IIF()),並將列作爲結果列名稱...遵循該模式。唯一的問題是如果你有不同的大小寫敏感的顏色拼寫,那麼你可能需要UPPER(C.Color)=「RED」(或其他顏色相似)

+0

謝謝。這樣做沒有任何明顯的處理時間增加。 – Harley 2010-03-12 22:49:15