2010-12-01 10 views
1

Ich bin völlig autodidaktisch, so gibt es offensichtliche Lücken in meinem Wissen. Wenn ich in der Lage sein musste, Daten von mehr als einer Tabelle zu bekommen, lernte ich, wie man Joins macht. wenn ich eine Gutscheinnummer, Kontonummer und Saldo aus den Gutscheinen Tabelle und eine entsprechende Adresse aus einer anderen Tabelle benötigen, würde ich dies zum Beispiel tun:Joins vs andere Methoden in mySQL

select v.voucherNbr, v.balanceInit, v.acctID, a.address, a.city from vouchers v 
left join addresses a on v.acctID = a.id 

die alle Gutschein Aufzeichnungen zurückkommen würden, und jede Adressen, die zufällig vorhanden sind (in diesem Fall möchten wir Belegdatensätze zurückgeben, selbst wenn es keine entsprechende Adresse gibt, daher linker Join.)

Ich habe vor kurzem einen Code geerbt, der versucht, die gleichen Daten zu erhalten (und in diesem Fall gibt es die richtigen Datensätze zurück), die es so macht:

select v.voucherNbr, v.balanceInit, v.acctID, a.address, a.city from vouchers v, addresses a 
where v.acctID = a.id 

Kann mir jemand erklären, was das bedeutet, anstatt einen Join zu benutzen. Wie ich bereits sagte, gibt es in diesem speziellen Fall die gleichen Daten wie der Join, aber würde es immer?

Antwort

3

Es ist ein Join, nur ein impliziter. Dies ist eine schlechte Codierungspraxis und sollte durch eine innere Verbindung ersetzt werden.

Das Problem mit diesem veralteten Code ist, dass es sehr einfach ist, versehentlich einen Cross-Join zu erstellen, und Ihr Code schwerer zu pflegen ist (Sie sollten implizite und explizite Joins in derselben Abfrage nicht mischen oder Sie könnten falsche Ergebnisse erhalten).

4

Es ist einfach passiert, dass es die gleichen Ergebnisse hat, aber zu einem bestimmten Zeitpunkt würde es nicht, da Ihre Abfrage einen Outer-Join hat, die von ihnen bereitgestellte Syntax ist ein impliziter Inner Join.

http://en.wikipedia.org/wiki/Join_(SQL)