我试图做一个左连接,应该很简单,我有两个问题;
加入,留下这个的3个字符
convert(VARCHAR(max),(file_key7), 102)
db [RF_Sydney].[dbo].[std_file]
中的
这一个的右3个字符
convert(VARCHAR(max),(code_key), 11)
db [RF_Sydney].[dbo].[std_code]
中的
答案 0 :(得分:3)
在SQL Server中,您可以加入任何可以满足的条件;换句话说,你可以这样做:
SELECT *
FROM dbo.std_file f LEFT JOIN std_code c
ON LEFT(convert(VARCHAR(max),(f.file_key7), 102), 3)
= RIGHT(convert(VARCHAR(max),(c.code_key), 11),3)
性能会很糟糕(除非您使用持久计算列并定义索引)。
答案 1 :(得分:1)
执行此操作的最佳方法是在每个表中使用computed column
。这将允许您简化连接代码,甚至允许您在列上定义索引以在需要时提高性能。至于获取左右值,可以使用LEFT()和RIGHT()函数:
LEFT(convert(VARCHAR(max),(file_key7), 102), 3)
和
RIGHT(convert(VARCHAR(max),(code_key), 11), 3)
对于连接表达式和查询本身,我们还没有足够的信息来确切知道您希望这些如何组合在一起。
答案 2 :(得分:0)
你知道file_key7或code_key的长度吗?加入LEFT(str,len)= RIGHT(str,len)应该可行,但可能会受到重大影响。也许你应该创建字段/列并将部分键粘贴在已经以正确字符格式转换的部分中