无法获得加入两个表的唯一值

Posted

技术标签:

【中文标题】无法获得加入两个表的唯一值【英文标题】:Can't get unique values joining two tables 【发布时间】:2012-03-09 15:50:32 【问题描述】:

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

我需要连接这两个表,并为 tbl1 中的给定 MB# 获取 tbl2 中的唯一 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 得到相同)。如何查询此内容以获得 MB# 的唯一 RTU?

【问题讨论】:

你能发布你的结果吗?你如何决定你需要哪一行。对于 ex for pccNo_pri = 17,您需要 53 还是 69 中的哪一个?逻辑是什么? 如果你想要RTUMB#的完整组合,那么你的结果是正确的。您的结果将是 (RTU, `PCCNo_PRI', 'MB#') : (53, 17, 103), (53, 17, 403), (69, 17, 103), (69, 17, 403) .由于您的数据清楚地包含相同 RTU 适用于多个 MB# 的组合,您的实际问题是什么,您将如何确定哪些行是“错误的”? 好问题。我想你暴露了我的问题。我知道它应该是什么,但在你们指出之前我看不到我的缺陷。让我看看我能不能重做一张桌子。 结果应该是:53 -> 103(仅限)& 69 -> 403(仅限) 【参考方案1】:

出现重复行是因为您加入“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] 

【讨论】:

好的代码,它消除了重复但没有给出正确的结果。 53 和 69 被分配给 MB#403。 53 应该转到 103 和 69 到 403。我看到有关如何确定结果应该是什么的问题。在试图回答这个问题时,我意识到实际上 53 只会被分配给 103,因为行处理的顺序而不是因为任何逻辑分配。 这就是答案。我回去修复了 tbl1(在我填充数据的方式中发现了一个错误),然后这个查询就起作用了。谢谢gbn。

以上是关于无法获得加入两个表的唯一值的主要内容,如果未能解决你的问题,请参考以下文章

加入表两次 - 在同一个表的两个不同列上

Django加入 - 我需要父母和子桌的所有领域

连接两个表的工作查询是完美的,除了我无法摆脱重复项

应用程序在后台后无法加入我的两个对话框之一的 quickblox

在连接两个表时获得R中的加权平均值

选择加入2个表和两个表的最新记录