2016-08-02 2 views
1

Ich habe einige Tabellen: tableA (COLA1, cola2, cola3, cola4, cola5) tableB (colb1, colb2) TableC (colc1, colc2, colc3) tableA.cola2 bezieht sich auf tableB.colb1 und tableA.cola3 bezieht sich auf tableC.colc1 ich möchte zum abrufen von Daten aus allen diesen Tabellen, ich habe eine Frage habe, wie dies mit beitreten:Tabellen mit Subqueries

Select tableA.cola1, tableA.cola2, tableA.cola3, tableA.cola4, tableA.cola5, tableB.colb2, tableC.colc2, tableC.colc3 
FROM tableA 
INNER JOIN tableB ON tableA.cola2 = tableB.colb1 
INNER JOIN tableC ON tableA.cola3 = tableC.colc1 
WHERE tableA.cola5 = 'something' 

So ist es möglich, diese Abfrage mit Unterabfragen zu schreiben statt BEITRETEN? und was wäre besser? Unterabfragen oder JOIN? Ein Freund von mir sagte mir, dass, wenn Sie große Tabellen haben, JOIN langsam ist und einen leistungsfähigen Computer benötigt, während Unterabfragen schneller sind und keinen leistungsfähigen Computer erfordern, um die Auswahl durchzuführen. Er sagte, es ist, weil Unterabfragen Ergebnisse basierend auf etwas wie Addition zurückgeben, und JOIN reutrn Ergebnisse basierend auf etwas wie Multiplikation (ich bin nicht gut in Englisch, so weiß ich nicht, wie das zu setzen, aber hoffe, Sie bekommen die Idee). Ich bin neu dazu und ich habe versucht zu googeln, kann das aber immer noch nicht verstehen. Würde irgendjemand bitte irgendwann meine Frage beantworten und mir diese Unteranfrage gegen JOIN-Sache erklären? Vielen Dank.

+0

Die MySQL-Abfrage-Optimierer beide wahrscheinlich schließt sich behandeln und Unterabfragen gleich. Wenn Leistung ein Problem ist, stellen Sie einfach sicher, dass die verbundenen Spalten indiziert sind. – Owen

Antwort

0

In den meisten Fällen sind JOINs schneller als Sub-Abfragen und es ist sehr selten, dass eine Sub-Abfrage schneller ist.

JOINs RDBMS kann einen Ausführungsplan erstellen, der besser für Ihre Abfrage ist und im Gegensatz zur Unterabfrage, in der alle Abfragen ausgeführt und alle Daten geladen werden, vorhersagen kann, welche Daten zur Verarbeitung und Zeiteinsparung geladen werden Mach die Verarbeitung.

+0

Vielen Dank für Ihre Antwort. Aber ich verstehe immer noch nicht, warum Leute mir geraten haben, Sub-Abfragen anstelle von Joins zu verwenden. Und können Sie mir zeigen, wie Sie diese Join oben mit Sub-Abfragen neu schreiben (nur neugierig, wie man es schreibt und es laufen lässt). Vielen Dank – nvd

0

Do it diese Weise:

Select cola1, cola2, cola3, cola4, cola5, colb2, colc2, colc3,colb1, colb2,colc1, colc2, colc3 FROM 
(Select cola1, cola2, cola3, cola4, cola5, colb2, colc2, colc3,colb1, colb2 FROM 
(Select cola1, cola2, cola3, cola4, cola5, colb2, colc2, colc3 FROM tableA) as A 
INNER JOIN 
(Select colb1, colb2 from tableB) as B 
ON A.cola2 = B.colb1)as AB 
INNER JOIN 
(Select colc1, colc2, colc3 From tableC) as C 
ON AB.cola3 = C.colc1 
WHERE AB.cola5 = 'something' 
+0

Aktualisieren Sie die Abfrage ... übernehmen Sie eine Überprüfung davon –