2012-03-09 3 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 

Мне нужно соединить две таблицы и получить уникальный УТМ (ы) в tbl2 для данного MB # в tbl1. Query =

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 заканчивается двумя входами; один к 103 и один 403 (69 получает то же самое). Как я могу запросить это для уникальных RTU (ов) для MB #?

+0

Можете ли вы пост, что должно быть ваши результаты? Как вы решаете, какую строку вам нужно. для ex для pccNo_pri = 17, для какого вам нужно 53 или 69? Какова логика? – Kaf

+0

Если вам нужен полный набор комбо «RTU» и «MB #», то ваши результаты верны. Ваши результаты будут ('RTU',' PCCNo_PRI ',' MB # '): (53, 17, 103), (53, 17, 403), (69, 17, 103), (69, 17, 403) , Поскольку ваши данные явно содержат комбо, где тот же RTU применяется к mulitple MB #, какова ваша фактическая проблема и как вы определяете, какие строки являются «неправильными»? –

+0

Хороший вопрос. Я думаю, вы разоблачили мою проблему. Я знаю, что это должно быть, но я не мог видеть свою ошибку, пока вы, ребята, не указали это. Позвольте мне посмотреть, смогу ли я переделать одну из этих таблиц. – cjjeeper

ответ

4

повторяющихся строк появляется потому, что вы присоединитесь на «17», которая дает 2 ряда на каждой стороне

Тогда, как он стоит, вы не можете с этим SELECT, список.
Как вы решаете, какие t1.MB# вы хотите для столбцов t2?

Нет дополнительной колонки 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

+0

Это ответ. Я вернулся и исправил tbl1 (нашел ошибку в том, как я заполнял данные), а затем этот запрос работал. Спасибо, gbn. – cjjeeper