如何只用一个连接“连接”一次表?

时间:2016-11-11 10:35:20

标签: sql sql-server tsql

我很难解释这个,所以你可能会对标题感到困惑。 但我会在这里尽力而为。

假设我们有以下情况:

测试表

  • 测试ID
  • testtakenby(ID)
  • testrevisedby(ID)

用户

  • 用户ID
  • 用户名

有没有办法让我能够得到以下结果:

“测试由user1进行,并由user2修改”

无需两次加入桌子? 像这样:

select * from tests
inner join users on tests.testtakenby = users.userid
inner join users on tests.testrevisedby = users.userid

我希望有一个高级的SQL技巧可以完成它,因为我担心可能的性能问题,因为加入同一个表两次(我认为它在双连接时表现不佳)

4 个答案:

答案 0 :(得分:2)

两个连接应该执行得很好,并且没有备用双连接语法

答案 1 :(得分:0)

要更正您的加入(因为您的加入会导致错误):

select * from tests
inner join users Taken 
on tests.testtakenby = Taken.userid
inner join users Revised
on tests.testrevisedby = Revised.userid

并且不,我猜没有办法在一次加入时连接两次表。

答案 2 :(得分:-1)

select (SELECT u1.UserName FROM users u1 WHERE u1.userid = tests.testtakenby) As takenBy,
       (SELECT u2.UserName FROM users u2 WHERE u2.userid = tests.testrevisedby) As RevisedBy
from tests
然而,这并没有给我所知的性能好处 - 它被认为在美学上更糟糕 - 如果在testtakenby或testrevisedby上没有匹配就会出现NULL - 在INNER JOIN中,将没有选择记录

答案 3 :(得分:-1)

为什么世界上你想阻止使用2个连接?这是正确的概念,你的SQL引擎应该尽自己的一份力量。