表一:            表一就这3条数据  
字段1       字段2
qwe           结果A
yui              结果B
mnb         结果C
表二:  表二有50多万条数据  
字段1   
ewq          
iuy              
bnm     




50多万行数据   想要得到的结果  
表二所有的数据 加上对应的表一的结果   字符串相同 不考虑位置    结果如下:表二.ewq          结果A
表二.iuy              结果B
表二. bnm         结果C




50多万行 
应该怎么写语句  请大侠们帮忙 , 如果这条路走不通的话  有没有好的别的思路 

解决方案 »

  1.   

    SELECT A.字段1,B.字段2
    FROM 表二 A
    JOIN 表一 B ON A.字段1=B.字段1
      

  2.   

    把3条记录变18条啊
    WITH /* 测试数据
    表1(字段1,字段2) AS (
    SELECT 'qwe','结果A' UNION ALL
    SELECT 'yui','结果B' UNION ALL
    SELECT 'mnb','结果C'
    ), */
    t0(c,字段2) AS (
        SELECT SUBSTRING(字段1,1,1), 字段2 FROM 表1
        UNION ALL
        SELECT SUBSTRING(字段1,2,1), 字段2 FROM 表1
        UNION ALL
        SELECT SUBSTRING(字段1,3,1), 字段2 FROM 表1
    )
    SELECT t1.c+t2.c+t3.c 字段1,
           t1.字段2
      INTO #temp1
      FROM t0 t1
      JOIN t0 t2
        ON t1.字段2 = t2.字段2
       AND t1.c <> t2.c
      JOIN t0 t3
        ON t1.字段2 = t3.字段2
       AND t1.c <> t3.c
       AND t2.c <> t3.c
    ORDER BY 字段2, 字段1--SELECT * FROM #temp1SELECT b.*
      FROM 表2 b
      JOIN #temp1 a
        ON a.字段1 = b.字段1
    #temp1的内容
    字段1    字段2
    ------ -----
    eqw    结果A
    ewq    结果A
    qew    结果A
    qwe    结果A
    weq    结果A
    wqe    结果A
    iuy    结果B
    iyu    结果B
    uiy    结果B
    uyi    结果B
    yiu    结果B
    yui    结果B
    bmn    结果C
    bnm    结果C
    mbn    结果C
    mnb    结果C
    nbm    结果C
    nmb    结果C
      

  3.   

    select '表二'+b.字段一 as 表二字段一,a.字段二 as 结果 from 表一 a
      join 表二 b on b.字段一 = REVERSE(a.字段一)      
      

  4.   

    如果字符串5,6,7位就麻烦了,不如写个函数,相同返回1,不同返回0 create function zz_fn_bjstr
     (@str varchar(max),@str1 varchar(max)) returns int
     as
    begin
     
     declare @i int = len(@str1),@n int,@jsstr varchar(1)
     
     while @i > 0
     begin
     select @jsstr = substring(@str1,@i,1) 
     set @str = stuff(@str,CHARINDEX(@jsstr,@str),1,'')
     set @str1 = LEFT(@str1,@i-1)
     set @i = @i - 1 end
    if @str = '' set @n = 1 else set @n = 0
    return @n
    end
       
     
      

  5.   

    完善一下,判断长度不一致不比较,效率更高点 create function zz_fn_bjstr
     (@str varchar(max),@str1 varchar(max)) returns int
     as
    begin
     
     declare @i int = len(@str1),@n int,@jsstr varchar(1)
     
      if len(@str) <> len(@str1)
      set @n = 0
     
     else
     begin 
     
     while @i > 0
     begin
     select @jsstr = substring(@str1,@i,1) 
     set @str = stuff(@str,CHARINDEX(@jsstr,@str),1,'')
     set @str1 = LEFT(@str1,@i-1)
     set @i = @i - 1 end
    if @str = '' set @n = 1 else set @n = 0
    end
    return @n
    end
      

  6.   

    问题补充:
    表一:表一里面 就如图数据 表二:表二里面有80多万数据想到到的结果 :
    如果表二里面的 字符是1位   没有任何结果如果表二里面的 字符是2位    在表一里面 类别列 B类别对应的 gg 列 去查找 字符串相同 不计字符串位置    得出 ‘会局’ 结果 如果找到结束  else 去 类别 C类别 对应的gg列   找 不计字符串位置 的字符串相同的  得出  和局   ‘结束’   比如 表一字符 pm   表二mp    就符合条件  完全相同的 更符合条件 如果表二里面的 字符是3位     在表一里面B类别对应的gg  列   被包含的 话   得出 ‘会局’ 结果 如果找到结束 else 去C类别被包含的 话   得出  和局 结束   比如 表一字符 pm   表二mpr    就符合条件  件 如果表二里面的 字符是4位    在表一里面A类别对应的gg  列   不计位置相同(比如表一 abcd  表二bcad 符合条件)   得出 ‘双局’ 符合条件结束;       else 去B类别被包含的 话 (比如 表一as  表二 asdg  符合天剑条件)   得出  会局  结束  ;   else  去C类别被包含的 话   得出  和局   结束 (比如 表一ad  表二 asdg  符合条件  )
      

  7.   

    问题补充:
    表一:表一里面 就如图数据 表二:表二里面有80多万数据想到到的结果 :
    如果表二里面的 字符是1位   没有任何结果如果表二里面的 字符是2位    在表一里面 类别列 B类别对应的 gg 列 去查找 字符串相同 不计字符串位置    得出 ‘会局’ 结果 如果找到结束  else 去 类别 C类别 对应的gg列   找 不计字符串位置 的字符串相同的  得出  和局   ‘结束’   比如 表一字符 pm   表二mp    就符合条件  完全相同的 更符合条件 如果表二里面的 字符是3位     在表一里面B类别对应的gg  列   被包含的 话   得出 ‘会局’ 结果 如果找到结束 else 去C类别被包含的 话   得出  和局 结束   比如 表一字符 pm   表二mpr    就符合条件  件 如果表二里面的 字符是4位    在表一里面A类别对应的gg  列   不计位置相同(比如表一 abcd  表二bcad 符合条件)   得出 ‘双局’ 符合条件结束;       else 去B类别被包含的 话 (比如 表一as  表二 asdg  符合天剑条件)   得出  会局  结束  ;   else  去C类别被包含的 话   得出  和局   结束 (比如 表一ad  表二 asdg  符合条件  )
      

  8.   

    天干+地支才10+12=22个字符,换算成位标志一个int字段就可以了。
    甲子乙丑 和 乙丑甲子 的位标志完全一致,SQL 中直接用位标志相等判断。