无法获取连接两个表的唯一值

时间:2012-03-09 15:50:32

标签: sql sql-server join distinct-values

我有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

我需要加入这两个表,并在tbl2中为tbl1中的给定MB#获取唯一的RTU。 查询=

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#?

1 个答案:

答案 0 :(得分: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]