2016-11-11 6 views
0

Ich habe drei Tabellen in der Datenbank (mit den Spalten, die ich in Klammern benötige);Beitreten aus drei Tabellen

  • Alphadata (Rechnung, DateRaised, Betrag, Mitarbeiter)

  • TL Auth (Rechnung)

  • Agents (Teamleiter)

Der Code, den ich zur Zeit bin versuchen zu verwenden, um alle diese Spalten in eine Abfrage zu bekommen, ist dies;

SELECT Alphadata.Invoice, Alphadata.DateRaised, Alphadata.Amount, Alphadata.Staff, Agents.TeamLeader, TlAuth.Invoice 

FROM Alphadata 

INNER JOIN TlAuth ON Alphadata.invoice = TlAuth.invoice 

INNER JOIN Agents.Alphaname = Alphadata.Staff; 

Ich glaube, ich habe etwas verpasst. Aber ich habe die AlphaData- und TL-Auth-Spalten, wenn ich die Agents entferne (letzte Zeile), aber die zweite, die ich neu hinzufüge, dass es schief geht.

Antwort

0
SELECT Alphadata.Invoice, Alphadata.DateRaised, Alphadata.Amount, Alphadata.Staff, Agents.TeamLeader, TlAuth.Invoice 
    FROM (Alphadata 
    INNER JOIN TlAuth ON Alphadata.invoice = TlAuth.invoice) 
    INNER JOIN Agents ON Agents.Alphaname = Alphadata.Staff; 

mit dem obigen Versuchen. Wenn Sie die Klausel ON weglassen, führt dies zum kartesischen Produkt von Agenten und Alphadata. Sie können mehr über das kartesische Produkt here lesen.

EDIT 1: Von Ihrem Kommentar Ich denke, Sie verwenden MS Access? Wenn ja, habe ich festgestellt, dass Sie Klammern benötigen, wenn Sie mehr als eine JOIN - see here haben. Ich habe sie in der obigen Abfrage hinzugefügt. Bitte versuche es erneut.

+0

Ja, ich habe das kopiert und bekomme jetzt einen Syntax Error (Missing Operator). Nicht 100%, was das Problem ist, wenn man das liest, zielt es auf das richtige Zeug! – Nik

+0

Verwenden Sie MS Access? –

+0

@Nik Bitte versuchen Sie es erneut mit den obigen Änderungen. –

1

Sie verfehlten den Namen Tabelle und ON in dieser Zeile:

INNER JOIN Agents ON Agents.Alphaname = Alphadata.Staff; 
+0

Ich habe gerade hinzugefügt, und scheinen jetzt Syntax Error (Missing Operator) bekommen. Denkst du, ich könnte irgendwo anders was falsch machen? – Nik

0

Sie haben eine Join-Bedingung für den zweiten und dritten Tabellen fehlt. Außerdem erhalten Sie beim Schreiben von SQL-Abfragen eine gute Laufleistung, wenn Sie die Tabelle Aliase verwenden. Beachten Sie in der korrigierten Abfrage, dass ich die drei Tabellen in Ihrer Abfrage mit Alias ​​versehen habe. Dann können Sie auf die verschiedenen Spalten verweisen, die diese Alises verwenden, und die Abfrage ist einfacher zu lesen.

SELECT t1.Invoice, 
     t1.DateRaised, 
     t1.Amount, 
     t1.Staff, 
     t2.Invoice, 
     t3.TeamLeader, 
FROM Alphadata t1      -- t1, t2 and t3 are aliases, or nicknames 
INNER JOIN TlAuth t2     -- for the actual tables in your query 
    ON t1.invoice = t2.invoice 
INNER JOIN Agents t3 
    ON t3.Alphaname = t1.Staff;