2014-03-13 97 views
0

我有一個表segmentsegmentCode, Description, pst-active, ...。我也有一個表subareaFK SegmentCode, deelgebiedID, Deelgebied, ...。現在我想選擇所有分段,但也選擇分段的分區。我的理想陣列將是SQL從其他表加入

segments[[segmentCode, Description, ..., [array with subareas data]],[segmentCode, Description, ..., [array with subareas data]]] 

我該如何在查詢中做到這一點?我試過,但它只是給了我段重複..

+0

也許你想要一個簡單的JOIN? – fmgonzalez

+0

是的,但我沒有很多加入經驗,你能幫我嗎? – nielsv

+0

你想獲得像數組這樣的分區細節嗎? – Sathish

回答

1

有兩種方法來實現這一目標:

要麼做保存所有需要的信息的數據庫的一個select語句,並建立從你的陣列。該聲明會吸引像SELECT * FROM segment seg JOIN subarea sub ON seg.segmentCode = sub.SegmentCode ORDER BY seg.segmentCode, sub.deelgebiedID;之類的東西。然後,您必須遍歷結果,跟蹤segmentCode,並在segmentCode發生更改時創建新的段對象。雖然它不會改變,只需將該子區域添加到該對象(或創建一個數組)。

另一種方式是拆分幾個選擇過程。首先獲取SELECT * FROM segment seg ORDER BY seg.segmentCode;的細分。然後循環檢索的分段並獲取每個子分區:SELECT * FROM subarea sub WHERE sub.SegmentCode = PARAMETER ORDER BY sub.deelgebiedID;

在您的情況下選擇哪種方法是性能(一個數據庫語句通常好得多)與內存消耗和代碼複雜性之間的折衷。

+1

在這兩種情況下都會有相同的內存消耗。所以我建議使用第一種方法,因爲在循環中db查詢有很多問題。 – max

+0

問題是,我在兩個表中都有相同名稱的字段...就像'地圖'..我該如何解決這個問題? – nielsv

+1

你可以只顯示你需要的列,你可以在查詢中重新命名列,如下所示:'SELECT seg.segmentCode,seg.Description as MyRenamedSegmentDescription,sub.Deelgebied as Foo FROM segment seg JOIN subarea sub ON ...' – SebastianH

0

好的,試試這個。

SELECT s.segmentCode, s.Description, a.* 
    FROM segment s 
    LEFT JOIN subarea a 
    ON (s.segmentCode = a.SegmentCode); 

我希望它適合你。