首页 > 解决方案 > 使用 CASE 和 MAX 函数基于第一个表中的 6 位或 7 位键与第二个表中的 7 位键连接表

问题描述

表格1:

Id1 Data1
123123  David
123124  Jan
1231344 Juro
1234126 Marco

表 2:

Id2 Data2
1231230 Info 1
1231231 Info 2
1231232 Info 3
1231240 Info 4
1231241 Info 5
1231242 Info 6

表 1 中的每个 id 根据前 6 位数字在表 2 中可以有 1 个或多个匹配项。例如,表 1 中的 123123 匹配表 2 中的 1231230、1231231 和 1231232。我正在尝试根据表 1 中的 id1 创建连接以匹配表 2 中的最大 id2。

标签: sqlsql-server

解决方案


我会加入使用LIKE

SELECT
    tb1.id1,
    tb1.data1
    MAX(tb2.[id2]) AS id2
FROM [dbo].[table1] tb1
LEFT JOIN [dbo].[table2] tb2
    ON tb2.[id2] LIKE CONCAT(tb1.[id1], '%')
GROUP BY 
    tb1.id1,
    tb1.data1
ORDER BY
    tb1.id1 DESC;

这种方法可能仍然保留在第二个表上使用索引的可能性。无论如何,它比您的版本更容易阅读。


推荐阅读