2013-05-09 16 views
57

Czy jest możliwe wpisanie zapytania join bez instrukcji ON? i w jaki sposób te połączenia różnią się LEFT JOIN, RIGHT JOIN działa.Jak używać mysql JOIN bez warunku WŁĄCZENIA?

+0

Ponieważ klauzula "ON" informuje serwer o tym, jak tabele są powiązane, nie. Jeśli twoje różne typy łączeń dają taki sam rezultat, to robisz to źle, a dodanie kodu może pomóc nam dostrzec twój problem. W międzyczasie udaj się na blog [Jeffa Atwooda] (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html) na 2-minutowe wprowadzenie do różne rodzaje złączeń. – fvu

Odpowiedz

84

MySQL documentation dotyczy tego tematu.

Oto streszczenie. Podczas korzystania z join lub inner join, warunek on jest opcjonalny. Różni się od standardu ANSI i różni się od prawie każdej innej bazy danych. Efektem jest cross join. Podobnie można użyć klauzuli on z cross join, która również różni się od standardowego SQL.

Łączenie krzyżowe tworzy produkt kartezjański - czyli każdą możliwą kombinację 1 wiersza z pierwszej tabeli i 1 wiersza z drugiej. Łączenie krzyżowe dla tabeli z trzema rzędami ("a", "b" i "c") oraz tabela z czterema wierszami (np. 1, 2, 3, 4) miałaby 12 wierszy.

W praktyce, jeśli chcesz zrobić krzyż dołączyć, a następnie użyć cross join:

from A cross join B 

jest znacznie lepsza niż:

from A, B 

oraz:

from A join B -- with no on clause 

on w przypadku prawych lub lewych połączeń zewnętrznych wymagana jest klauzula, więc dyskusja nie jest istotna dla nich.

Jeśli chcesz zrozumieć różne rodzaje połączeń, musisz przeprowadzić pewne badania na relacyjnych bazach danych. Stackoverflow nie jest odpowiednim miejscem dla tego poziomu dyskusji.