Чи можна написати запит приєднання без ON
заяви? і як ці з'єднання відрізняються LEFT JOIN, RIGHT JOIN
.
Чи можна написати запит приєднання без ON
заяви? і як ці з'єднання відрізняються LEFT JOIN, RIGHT JOIN
.
Відповіді:
Документація на MySQL охоплює цю тему.
Ось конспект. При використанні join
або inner join
, то on
умова НЕ є обов'язковим. Це відрізняється від стандарту ANSI і відрізняється майже від будь-якої іншої бази даних. Ефект - а cross join
. Так само ви можете використовувати on
пункт з cross join
, який також відрізняється від стандартного SQL.
Перехресне з'єднання створює декартовий продукт - тобто можливе поєднання 1 ряду з першої таблиці та 1 ряд з другого. Хрест, що поєднує таблицю з трьома рядами ('a', 'b' і 'c'), а таблицю з чотирма рядами (скажімо, 1, 2, 3, 4), мав би 12 рядків.
На практиці, якщо ви хочете зробити перехресне з'єднання, використовуйте cross join
:
from A cross join B
набагато краще, ніж:
from A, B
і:
from A join B -- with no on clause
The on
Положення потрібно для правого або лівого зовнішнього з'єднання, так що обговорення не має значення для них.
Якщо вам потрібно розібратися в різних типах приєднань, то вам потрібно зробити деякі дослідження на реляційних базах даних. Stackoverflow не є відповідним місцем для такого рівня обговорення.
Дивіться приклад в веб-сайті http://www.sitepoint.com/understanding-sql-joins-mysql-database/
Ви можете використовувати "USING" замість "ON", як у запиті
SELECT * FROM table1 LEFT JOIN table2 USING (id);
ON
стаття повідомляє серверу, як пов’язані таблиці, немає. Якщо ваші різні типи приєднання дають однаковий результат, ви робите це неправильно, а додавання коду може допомогти нам виявити вашу проблему. Тим часом перейдіть до блогу Джеффа Етвуда на 2 хвилини вступу до різних типів приєднання.