使用Substring或Like运算符获取左外连接的结果

时间:2018-04-17 09:16:59

标签: sql sql-server-2008

我正在寻找我的问题的解决方案,但没有得到正确的答案。所以,我决定在这里写一个问题。请帮帮我。

我有两张桌子

  1. All_Records(此表包含所有记录和密钥的说明)
  2. Usage_Table(此表包含所有键)
  3. 因此,我需要一个查询,显示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,因此字符长度可能会有所不同。你有什么解决方案吗?请帮忙。期待您的回复。

1 个答案:

答案 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上添加索引以提高效果。