SQL Server 对多个列或单个计算列进行SQL联接

slsn1g29  于 2022-11-21  发布在  其他
关注(0)|答案(2)|浏览(164)

我将后端预算数据库从Access迁移到SQL Server时遇到了问题。
我有两个表(我们称之为t1和t2),它们共享许多共同的字段:资金、部门、对象、子代码、跟踪代码、保留和FYEnd。
如果要联接表以查找所有7个字段都匹配的记录,则可以使用每个字段创建内部联接:

SELECT * 
FROM t1 
     INNER JOIN t2 
      ON  t1.Fund = t2.Fund 
      AND t1.Department = t2.Department 
      AND t1.Object = t2.Object 
      AND t1.Subcode = t2.Subcode 
      AND t1.TrackingCode = t2.TrackingCode 
      AND t1.Reserve = t2.Reserve 
      AND t1.FYEnd = t2.FYEnd;

这是可行的,但运行速度非常慢。当后端是Access时,我可以通过向两个表中添加计算列来解决该问题。基本上,它只是使用“-”作为分隔符来连接字段。修改后的查询如下所示:

SELECT *
FROM t1 INNER JOIN t2
        ON CalculatedColumn = CalculatedColumn

这看起来更干净,运行速度也快得多。问题是当我将t1和t2移到SQL Server时,同一个查询给我一个错误消息:

我是SQL Server的新手。有人能解释一下这是怎么回事吗?是否需要更改计算列的设置?

rks48beu

rks48beu1#

从我的评论张贴这一个答案。
通常,这是由于引用得两列之间得数据类型不匹配造成得问题.请检查并确保两个字段(CompositeID)得数据类型相同.

z9smfwbn

z9smfwbn2#

由于ON子句只能访问表的列,因此必须在连接列之前计算列。
无论如何,有两个相同的表是没有好处的,所以你应该完全重新考虑你的设计。

SELECT t1a.*,t2a.*
FROM (SELECT CalculatedColumn, * FROM t1) t1a INNER JOIN (SELECT CalculatedColumn, * FROM  t2 ) t2a
        ON t1a.CalculatedColumn = t2a.CalculatedColumn

相关问题