2016-11-11 5 views
-3

Es ist schwer für mich, dies zu erklären, so dass Sie wahrscheinlich durch den Titel verwirrt sind. Aber ich werde mein Bestes hier versuchen.Wie man eine Tabelle zweimal mit nur einer Verbindung "beitritt"?

Sagen wir das folgende Szenario haben:

Tests Tabelle

  • Test ID
  • testtakenby (id)
  • testrevisedby (id)

Benutzer

  • Benutzer-ID
  • Benutzername

Gibt es eine Möglichkeit für mich in der Lage sein, die folgenden Ergebnisse zu erhalten:

"Test von user1 und überarbeitet von user2 genommen wurde"

Ohne zweimal an die Tische gehen zu müssen? So:

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

Ich hoffe es einen Trick bekommen es durch den Beitritt der gleichen Tabelle zweimal getan, wie ich mögliche Performance-Probleme kümmern erweiterte SQL ist (ich es vermute, mit einem als auch nicht durchführen würde Doppel join)

+1

Wenn Sie Leistungsprobleme haben, sollten Sie nach korrekten Indizes suchen, die Ihre Lösung nicht ändern. – Jens

+1

Ich denke nicht, dass es gibt, und warum würde es ein Leistungsproblem mit dem Beitritt zweimal geben? – Ric

+0

Sie müssen die zweite Instanz von Benutzern Alias ​​- wenn das das Problem ist - eine andere Lösung besteht darin, zwei Unterabfragen in einem Select – Cato

Antwort

2

Zwei ist gut und es sollte ausführen schließt sich keine alternative Doppel Join-Syntax

-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 

dies jedoch keine Leistungsvorteile gibt, gebe ich kenne - es ästhetisch schlechter betrachtet wird - NULL aussehen würde, wenn es keine angleichen testtakenby oder testrevisedby - in einem INNER JOIN wäre kein Datensatz ausgewählt

-1

Warum in der Welt möchten Sie die Verwendung von 2 Joins verhindern? Das ist genau das richtige Konzept und Ihre SQL-Engine sollte ihren Teil dazu beitragen.

+0

Weil ich nicht so erfahren bin in SQL und ziele darauf ab, mich zu verbessern, indem ich Fragen an diejenigen stelle, die wahrscheinlich mehr wissen als ich. –

0

zur Korrektur Ihrer join (da Ihre beitreten zu Fehlern führen wird):

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

und nein, ich denke, es gibt keine Möglichkeit, eine Tabelle zweimal zu verbinden mit einer beizutreten.

Verwandte Themen