2011-05-30 64 views
1

首先,我使用的是SQL Server 2008 R2,并且我只用了2周,但是有限的编程知识。我需要做的是在表2(t2)的表1(t1)中找到记录的所有实例,并将它们输出到多个表(每个t2.c1-c25有1个输出表)。我目前在dos中使用concatenate和find来做到这一点,但我知道SQL中必须有更好的方法。如何查找表1中记录的表1中的所有实例?

下面是各表的基本信息:

  • T1包含1列(T1.C1)
  • T1.C1有10万条记录(行)
  • T2具有25列
  • t2有250,000条记录(行)

例如,t1.c1中的记录(行)1是单词“dog”,我想知道t2.c1中的单词“dog”出现在哪里s,并将整个记录与关键字“dog”一起输出到t3。那么T3是这样的:

t3.c1 =狗 t3.c2-C28 =行相匹配的数据 等等

最后,我最终会包含在T2所有的比赛T3 .c2到t1.c1。然后重复此过程以使t1.c1到t2.c2,t1.c1到t2.c3到t2.c25,每个都在它自己的输出表(t3-t28)中匹配。

任何帮助将不胜感激,我可以澄清是否有任何问题!

+0

你不能让每个输出单独的表,真的。客户如何知道桌子何时停止? – gbn 2011-05-30 19:02:56

+0

从技术上讲,我是客户。这样做的目的仅仅是为每个关键词找到的每列生成一个表格。表1中列出的表1中的所有数据应该位于其自身的输出表中,其中包含整个记录。所有数据都是固定的,因为永远不会有任何增加。 – Chetan 2011-05-30 20:26:32

+0

你不能有一个表每个匹配没有一个循环,这是*不是*什么SQL是关于 – gbn 2011-05-31 07:48:27

回答

0

这是一个JOIN

SELECT 
    t1.c1, t2.c2, ..., t2.c28 
FROM 
    t1 
    JOIN 
    t2 ON t2.c1 LIKE '%' + t1.c1 + '%' 

警告:

  • 这将经营不善(如与领先的通配符)
  • 此相匹配,如果T1.C1有 '老鼠' 和T2.C1具有'scratch'

它你期望一个确切的匹配,那么你会有ON t2.c1 = t1.c1而不是

如果你想要的东西,以“数字”的“虚拟”的表,然后将其添加到SELECT

DENSE_RANK() OVER (ORDER BY t1.c1) AS Virtualtable 
+0

谢谢,我实际上正在寻找一个像一个确切的。我会试试这个!因此寻找老鼠寻找划痕是完全可以接受的。原因是有些数据是用户输入的,因此易受误解。为了捕捉所有变化,我将不得不做一个LIKE(即,当搜索xentel时,我们也有zentel,zentell,xentell,所以我搜索“entel”并希望捕获所有拼写错误)。 – Chetan 2011-05-30 20:30:05

+0

@Chetan:你应该看看[DIFFERENCE](http://msdn.microsoft.com/en-us/library/ms188753.aspx):它可能对你有用 – gbn 2011-05-31 07:50:31

相关问题