【发布时间】:2012-02-21 16:03:33
【问题描述】:
给定两个表,其中第一个表中的两列可能具有不同的值,在第二个表中引用单个列,有没有办法“定义”这些列而不将表连接两次?
例如,如果表一是
TransactionRecord( UserCreated char(3), UserModified char(3), ... , OtherData )
表二是
Users( UserID char(3), UserName varchar(50), ... , OtherData )
有没有办法得到一个结果集是
Result( TransactionData, UserNameCreated, UserNameModified )
没有将第一个表连接到第二个表两次?到目前为止,我已经能够使用以下 SQL 实现这一目标。
SELECT OtherData, uc.[UserName], uf.UserName
FROM TransactionData
LEFT JOIN Users uc ON TransactionData.UserCreated = uc.UserID
LEFT JOIN Users um ON TransactionData.UserModified= um.UserID
但是这些表包含相当多的记录,并且由于连接相对昂贵,我正在寻找更好的方法。我使用的是 TSQL,数据库服务器是 SQL Server 2005。
【问题讨论】:
-
为了避免这种“双重”连接,您可以将用户名存储在两个单独的列中。我认为索引将解决您的性能问题
-
我不确定我是否理解您将用户名存储在两个单独的列中的意思。
-
TransactionData 还有两列:UserCreatedName, UserModifiedName
-
好的。我明白你的意思。在这种情况下,我不确定向表中引入两个新字段是否合理。这也是供应商提供的软件的数据库,所以我认为修改表和填充列可能必须使用触发器之类的东西来完成,而不是在应用程序代码中它可能应该在的地方。
-
我也不喜欢这个。我会在非常极端的情况下使用它。但是,好的索引是您的最佳选择。
标签: tsql join query-optimization