我有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#?
答案 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]