2017-11-12 17 views
-1

私はmysqlでかなり新しいです。私は2つのテーブル複数のAND条件と複数の内部結合を使用した内部結合の違い

に参加する必要がありtable_AとTable_B

それらを呼び出すことができます私は、内側に学んだ今日は

に参加する複数の内部を使用するクエリに出くわした次のコードを使用して表が

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 

参加

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 

これらの違いは何ですか?

ここで質問を書いているのは初めてです。

+1

まず、SQLで定義結合を読み込みます。例を通して作業してください。パートごとにコードを実行します。例:sqlfiddle.com。これは「自己結合」です。それについて読む。 – philipxy

+0

の違いは、クエリが管理不能になることです。多数の結合がクエリの実行時間を長くします。クエリの実行時間の両方をテストすることができます。違いが得られます。 –

+0

@NewazSharif:実際の機能にも違いがあります。 –

答えて

1

最初のクエリは6列だけを返します.2番目のクエリは12を返します。stクエリはすべて2番目のクエリと一致する必要があります。

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

ありがとうございました。私は本当にあなたの迅速な対応に感謝します。 –

+0

@MohamedAmarこれはあなたの質問を実行します。どうしてあなたは?なぜ質問するのですか? – philipxy

+0

私はあなたの声明を理解していないのが怖いです。 –

関連する問題