2016-11-11 175 views
-3

我很难解释这个,所以你可能会被标题弄糊涂了。 但我会在这里尽我所能。如何用一个连接“连接”一个表格两次?

假设我们有以下情形:

测试表

  • 测试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技巧(我相信它不会与执行,以及双连接)

+1

如果您有性能问题,您应该查找正确的索引而不是更改您的解决方案。 – Jens

+1

我不这么认为,为什么连接两次会出现性能问题? – Ric

+0

您需要别名第二个用户实例 - 如果这是问题 - 另一个解决方案是在select – Cato

回答

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 

然而,这没有给出性能优势,我知道的 - 它被认为是美学更糟 - 如果有NULL似乎没有匹配testtakenby或testrevisedby - 在INNER JOIN中,将没有选择记录

-1

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

+0

因为我不是那种SQL经验丰富的人,而是通过向那些可能比我知道得更多的人提出问题来改善自己。 –

0

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

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

,没有我想有没有办法加入牌桌两次一个连接。