2012-03-09 27 views
0

我有2個表需要加入並選擇唯一的行。這裏是我的數據樣本:(有更多列)無法獲得連接兩個表的唯一值

tbl1: 
MB# MBName PCCNo_PRI Primary_IP  PCCNo_SEC   Secondary_IP ID 
100 name 0    10.1.9.10  30    10.1.9.10  1 
103 name3 17    10.1.9.27  47    10.1.9.67  4 
403 name13 17    10.1.9.27  47    10.1.9.67  14 

TBL2:

RTU PCC#_PRI PCC#_SEC STATION ADDRESS 
15 0   30   6 
52 12   42   1 
53* 17   47   1 
54 18   48   1 
63 9   39   2 
69* 17   47   2 

我需要連接兩個表,並獲得獨特的RTU(收費)tbl2的一個給定MB#在tbl1。 查詢=

SELECT t1.MB#,t2.RTU,t2.[Device Manufacturer],t2.PCC#_PRI,t2.PCC#_SEC,t2.[STATION ADDRESS] 
INTO C300_RTU_MASTERBLK_Map 
FROM mbm_PCDIMasterBlk_tbl as t1, dbo.WOA_PCC_Conn_tbl as t2 
WHERE t1.PCCNo_PRI = t2.PCC#_PRI 

我的tbl2的53和69(*以上)越來越重複的行。 53最後有2個條目;一到103和一個403(69得到相同)。我如何查詢這個獨特的RTU到MB#?

+0

你可以發佈你的結果應該是什麼?你如何決定你需要哪一行。對於前pccNo_pri = 17,哪一個你需要53或69?什麼是邏輯? – Kaf 2012-03-09 16:06:36

+0

如果您想要「RTU」和「MB#」的完整組合,那麼結果是正確的。你的結果將是('RTU','PCCNo_PRI','MB#'):(53,17,103),(53,17,403),(69,17,103),(69,17,403) 。由於您的數據清楚地包含了相同的RTU適用於多個MB#的組合,因此您的實際問題是什麼以及如何識別哪些行是「錯誤的」? – 2012-03-09 16:29:18

+0

好問題。我認爲你已經暴露了我的問題。我知道它應該是什麼,但直到你們指出它的時候才能看到我的缺陷。讓我看看我是否可以重做這些表格之一。 – cjjeeper 2012-03-09 16:33:06

回答

4

重複的行出現,因爲你的「17」,它賦予每邊

2行之後,因爲它代表加入,你不能與SELECT列表。
你如何決定t2列需要哪個t1.MB#

我沒有看到第二個JOIN列。
所以,你可以得到最好的是用MAX(或MIN)以任意選取403或103

SELECT 
    MAX(t1.MB#) AS MB#, 
    t2.RTU,t2.[Device Manufacturer],t2.PCC#_PRI,t2.PCC#_SEC,t2.[STATION ADDRESS] 
INTO C300_RTU_MASTERBLK_Map 
FROM 
    dbombm_PCDIMasterBlk_tbl as t1 
    JOIN 
    dbo.WOA_PCC_Conn_tbl as t2 ON t1.PCCNo_PRI = t2.PCC#_PRI 
GROUP BY 
    t2.RTU,t2.[Device Manufacturer],t2.PCC#_PRI,t2.PCC#_SEC,t2.[STATION ADDRESS] 
+0

好的代碼,它消除了重複,但沒有給出正確的結果。 53&69分配給MB#403。 53應該去103和69到403.我看到如何確定結果應該是什麼問題。在試圖回答時,我意識到真正的53只會被分配到103,因爲行處理的順序不是因爲任何邏輯分配。 – cjjeeper 2012-03-09 16:30:23

+0

這就是答案。我回去修復了tbl1(在填寫數據時發現了一個錯誤),然後這個查詢就起作用了。謝謝gbn。 – cjjeeper 2012-03-09 22:11:24