为什么我要在非独特字段上进行内连接?

时间:2010-03-22 18:17:34

标签: sql distinct inner-join

我刚遇到一个在非独特字段上执行inner join的查询。我以前从未见过这个,我对这种用法有点困惑。类似的东西:

SELECT distinct all, my, stuff
FROM myTable
INNER JOIN myOtherTable
   ON myTable.nonDistinctField = myOtherTable.nonDistinctField
(WHERE some filters here...)

我不太确定我的问题是什么或如何表达它,或者为什么这让我感到困惑,但我想知道是否有人可以解释为什么有人需要在非独特字段上进行内部联接那么只选择不同的值......?在非独特字段上是否合法使用内连接?会是什么目的?如果有这样一个查询的合理原因,你能举例说明它的用途吗?

4 个答案:

答案 0 :(得分:2)

我似乎无法提出任何有效的理由来做你所要求的事情。至少并非没有对系统的极端限制。

答案 1 :(得分:2)

我可以想到一个原因 - 非独特字段是外键。

该字段在外表中是不同的,但不在第一个表中。

例如,假设您正在清理一个旧的复制重复邮件列表,并且您已经修复了国家/地区字段,以便存储国家/地区ID而不是存储国家/地区名称。您加入countryid到country以获取国家/地区数据,现在您可以在国家/地区表中存储其他数据。

您现在可以获得国家/地区的标准化优势,但仍然可以使用地址表中的不同值。

略有做作但会奏效。

答案 2 :(得分:1)

可能似乎合理的一种情况是基于日期的报告系统,该系统在特定时间段内被查询。比如说,一年的前3个月。然后可以像你提到的那样加入来自另一个表的相关数据,其中nonDistinctField是year.month(yyyy.mm)。尽管如此,联接解决方案可能没有多大意义,但您可能正在使用加入分组月份的其他聚合函数(SUM,AVG等)。

我想应该有很多例子,聚合查询可以从这种类型的连接中受益。

这并不是说这是一个好主意,但也许你可能只限于使用非规范化数据或一些非常糟糕的数据模型。

答案 3 :(得分:0)

我认为应该只根据它们之间的关系(使用不同的列)来连接表。当人们编写类似的查询时,可能应该再次查看数据库设计。