【问题标题】:SQL: Finding duplicate values in a field, but using SubString()SQL:在字段中查找重复值,但使用 SubString()
【发布时间】:2010-08-12 16:46:32
【问题描述】:

这是所有 SQL SERVER 2000 专家的问题:

我只有一张表...我已经可以找到某个字段中的任何值是否也出现在另一条记录中。

I.E.:是否有任何记录 字段中的“ABCDEFGHI”,然后 “ABCDEFGHI”再次在同一 字段...但在另一个记录中。

但是当我尝试使用子字符串时遇到了麻烦。

I.E.:任何记录中是否有“CDEF” 一个字段,然后在那个字段中再次“DEFG” 相同的字段...但在另一个记录中。 (编辑:那当然不匹配。)

我正在尝试将一个字段的 PART 与另一个字段的 PART 进行比较。 仅比较字符 3-6 个字符,与字符 4-7。 (我需要为这两个字段指定我自己的开始结束范围。) 具体的字母是什么……没关系。只是他们“匹配”。

这似乎不起作用:

SELECT t1.ID + ' + ' + t2.ID  
FROM InfoTable As t1         
INNER JOIN InfoTable AS t2     ON t1.ID = SUBSTRING(t2.ID, 3, 4) 

(编辑:我也不需要列出任何与自己匹配的记录。)

【问题讨论】:

  • 远不清楚您要在这里找到什么。您是否希望所有在其中任何位置具有“CDEF”的记录都链接到在其中任何位置具有“DEFG”的所有其他记录?是否所有从位置 3 开始具有“CDEF”的记录都链接到从位置 4 开始具有“DEFG”的所有其他记录?是否所有具有公共字符串字符 3 到 6 的记录都链接到具有相同公共字符串字符 4 到 7 的所有其他记录?还有什么?
  • 其中的任何地方?不,只是我指定的开始/结束子字符串。从位置 a 开始,长度为 b 个字符... 匹配从位置 c 开始,长度为 d 个字符的记录。 (当然,b 和 d 必须相同才能发生匹配。)

标签: sql sql-server-2000 substring inner-join duplicate-removal


【解决方案1】:

也许

SELECT t1.ID + ' + ' + t2.ID  
FROM InfoTable As t1         
INNER JOIN InfoTable AS t2     ON SUBSTRING(t1.ID,3,6) = SUBSTRING(t2.ID, 4, 7) 

【讨论】:

  • 我试过了,它似乎返回了与自己匹配的记录。有没有办法排除那些“相同的记录”匹配?
  • 在 ON 子句中添加另一个条件...和 ​​t1.id
  • 只需将AND T1.ID <> T2.ID 添加到 WHERE 子句中。这是假设 ID 是唯一的。如果您提供表定义、示例数据和预期结果,这可能是最好的 - 在发布 SQL 查询问题时这总是一个好主意。
  • 一些很棒的想法。让我试试看。这些中的任何一个“更好”:“将 ”? (避免记录匹配自己。)
  • @Helen:我认为将它放在 ON 子句中更好,因为它清楚地表明您不想链接到同一条记录。 (处理方面,在这个查询中它不应该有任何区别。)如果 both SUBSTRING(t1.ID,3 ,6) = SUBSTRING(t2.ID, 4, 7) SUBSTRING(t2.ID,3,6) = SUBSTRING(t1.ID, 4, 7) - 另一方面,如果只有后者是正确的,然后使用< 将意味着两者都不会出现。我建议<> 因此更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 2016-11-21
  • 2012-11-15
  • 2012-02-24
  • 1970-01-01
相关资源
最近更新 更多