我正在寻找我的问题的解决方案,但没有得到正确的答案。所以,我决定在这里写一个问题。请帮帮我。
我有两张桌子
因此,我需要一个查询,显示Usage_Table中可用密钥的说明。为此我使用Left Outer Join和我的查询
Select U.key, A.Explanation
from Usage_Table U
left outer join All_Records A on U.key = A.key
如果数据类似
,则上述查询工作正常Usage_Table
Key ---
1.8.0
2.9.0
16.8.0
但现在情况变得像我有关键的历史数据,如
1.8.0*12
1.8.0*13
1.8.0*14
无法在All_Records表中添加所有键和历史数据键。 但是所有历史键都与原始键具有相同的解释。
所以,我陷入了疑问。我使用LIKE运算符或子字符串。子字符串失败,因为键不仅是1.8.0,它可能是29.8.0,因此字符长度可能会有所不同。你有什么解决方案吗?请帮忙。期待您的回复。
答案 0 :(得分:1)
我想你想要:
Select U.key, A.Explanation
from Usage_Table U left outer join
All_Records A
on U.key like A.key + '%';
或者,也许更高效的方法是使用计算列来修复密钥:
alter table Usage_Table
add key_correct as (left(key, charindex('*', key + '*') - 1);
然后,您可以将join
标记为:
Select U.key, A.Explanation
from Usage_Table U left outer join
All_Records A
on A.key = u.key_correct;
您甚至可以在u.key_correct
上添加索引以提高效果。