繁体   English   中英

SQL 连接多列或单个计算列

[英]SQL join on multiple columns or on single calculated column

我正在将后端预算数据库从 Access 迁移到 SQL 服务器,我遇到了一个问题。

我有 2 个表(我们称它们为 t1 和 t2)共享许多共同的字段:Fund、Department、Object、Subcode、TrackingCode、Reserve 和 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 服务器时,相同的查询给了我一条错误消息:

在此处输入图像描述

我是 SQL 服务器的新手。 谁能解释这里发生了什么? 计算列是否需要更改设置?

您必须在连接它们之前计算列,因为ON子句只能访问表的列。

无论如何,有两个相同的表是不好的,因此您应该彻底重新考虑您的设计。

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

将其发布为我评论的答案。

通常,这是引用的两列之间数据类型不匹配的问题。 检查并确保两个字段(CompositeID)的数据类型相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM