我很难解释这个,所以你可能会对标题感到困惑。 但我会在这里尽力而为。
假设我们有以下情况:
测试表
有没有办法让我能够得到以下结果:
“测试由user1进行,并由user2修改”
无需两次加入桌子? 像这样:
select * from tests
inner join users on tests.testtakenby = users.userid
inner join users on tests.testrevisedby = users.userid
我希望有一个高级的SQL技巧可以完成它,因为我担心可能的性能问题,因为加入同一个表两次(我认为它在双连接时表现不佳)
答案 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引擎应该尽自己的一份力量。