表一: 表一就这3条数据
字段1 字段2
qwe 结果A
yui 结果B
mnb 结果C
表二: 表二有50多万条数据
字段1
ewq
iuy
bnm
。
。
。
。
50多万行数据 想要得到的结果
表二所有的数据 加上对应的表一的结果 字符串相同 不考虑位置 结果如下:表二.ewq 结果A
表二.iuy 结果B
表二. bnm 结果C
。
。
。
。
50多万行
应该怎么写语句 请大侠们帮忙 , 如果这条路走不通的话 有没有好的别的思路
字段1 字段2
qwe 结果A
yui 结果B
mnb 结果C
表二: 表二有50多万条数据
字段1
ewq
iuy
bnm
。
。
。
。
50多万行数据 想要得到的结果
表二所有的数据 加上对应的表一的结果 字符串相同 不考虑位置 结果如下:表二.ewq 结果A
表二.iuy 结果B
表二. bnm 结果C
。
。
。
。
50多万行
应该怎么写语句 请大侠们帮忙 , 如果这条路走不通的话 有没有好的别的思路
FROM 表二 A
JOIN 表一 B ON A.字段1=B.字段1
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
join 表二 b on b.字段一 = REVERSE(a.字段一)
(@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
(@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
表一:表一里面 就如图数据 表二:表二里面有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 符合条件 )
表一:表一里面 就如图数据 表二:表二里面有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 符合条件 )
甲子乙丑 和 乙丑甲子 的位标志完全一致,SQL 中直接用位标志相等判断。