2017-11-12 1 views
-1

Ich bin ziemlich neu in MySQL. Ich habe zwei Tabellen verbindenUnterschied zwischen Innerer Join mit mehreren UND-Kriterien vs mehrere innere Joins

sie Lets nennen TABLE_A und Table_B

Ich lernte innere Tabellen verbinden den folgenden Code

SELECT * 
FROM table_A a 
INNER JOIN table_B b 
ON a.criteria_1 = b.criteria_1 
AND a.criteria_2 = b.criteria_2 
AND a.criteria_3 = b.criteria_3 

Heute verwenden ich auf eine Abfrage kam die inneren mehr verwendet verbindet

SELECT * 
FROM table_A a 
INNER JOIN table_B b 
ON a.criteria_1 = b.criteria_1 
INNER JOIN table_B b1 
ON a.criteria_2 = b1.criteria_2 
INNER JOIN table_B b2 
ON a.criteria_3 = b3.criteria_3 

Was ist der Unterschied zwischen diesen beiden?

Dies ist das erste Mal, dass ich hier eine Frage schreibe.

+1

Beginnen Sie mit dem Lesen einer Definition Join in SQL. Arbeite durch ein Beispiel. Code teilweise ausführen. ZB bei sqlfiddle.com. Dies ist ein "Self-Join". Lesen Sie darüber. – philipxy

+0

Unterschied ist es wird Ihre Abfrage nicht handhabbar machen. und viele Joins erhöhen die Ausführungszeit Ihrer Abfrage. Sie können beide Ausführungszeiten der Abfrage testen und erhalten den Unterschied. –

+0

@NewazSharif: Es gibt tatsächlich einen Unterschied in der Funktionalität. –

Antwort

1

Paar von Unterschieden, erste Abfrage wird nur 6 Spalten zurückgeben 2. wird 12 zurückgeben,! St Abfrage alle Kriterien müssen übereinstimmen 2. Abfrage kann jeder.

DROP TABLE IF EXISTS A,B; 

CREATE TABLE A (C1 INT, C2 INT, C3 INT); 
CREATE TABLE B (C1 INT, C2 INT, C3 INT); 

INSERT INTO A VALUES (1,1,1),(1,2,4); 
INSERT INTO B VALUES (1,1,1),(1,2,3); 

SELECT * FROM 
A 
JOIN B ON A.C1 = B.C1 AND A.C2 = B.C2 AND A.C3 = B.C3; 

SELECT * 
FROM A 
JOIN B B1 ON A.C1 = B1.C1 
JOIN B B2 ON A.C2 = B2.C2 
JOIN B B3 ON A.C3 = B3.C3; 

SELECT * FROM 
    -> A 
    -> JOIN B ON A.C1 = B.C1 AND A.C2 = B.C2 AND A.C3 = B.C3; 
+------+------+------+------+------+------+ 
| C1 | C2 | C3 | C1 | C2 | C3 | 
+------+------+------+------+------+------+ 
| 1 | 1 | 1 | 1 | 1 | 1 | 
+------+------+------+------+------+------+ 
1 row in set (0.00 sec) 

MariaDB [sandbox]> 
MariaDB [sandbox]> SELECT * 
    -> FROM A 
    -> JOIN B B1 ON A.C1 = B1.C1 
    -> JOIN B B2 ON A.C2 = B2.C2 
    -> JOIN B B3 ON A.C3 = B3.C3; 
+------+------+------+------+------+------+------+------+------+------+------+------+ 
| C1 | C2 | C3 | C1 | C2 | C3 | C1 | C2 | C3 | C1 | C2 | C3 | 
+------+------+------+------+------+------+------+------+------+------+------+------+ 
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 
| 1 | 1 | 1 | 1 | 2 | 3 | 1 | 1 | 1 | 1 | 1 | 1 | 
+------+------+------+------+------+------+------+------+------+------+------+------+ 
2 rows in set (0.00 sec) 
+0

Danke, Mann. Ich schätze deine schnelle Antwort sehr. –

+0

@MohamedAmar Dies führt Ihre Abfragen. Warum hast du nicht? Warum eine Frage stellen? – philipxy

+0

Ich fürchte, ich verstehe Ihre Aussage nicht. –