Як користуватися mysql ПРИЄДНАЙТЕСЬ без умови ON?


106

Чи можна написати запит приєднання без ON заяви? і як ці з'єднання відрізняються LEFT JOIN, RIGHT JOIN.


1
Оскільки ONстаття повідомляє серверу, як пов’язані таблиці, немає. Якщо ваші різні типи приєднання дають однаковий результат, ви робите це неправильно, а додавання коду може допомогти нам виявити вашу проблему. Тим часом перейдіть до блогу Джеффа Етвуда на 2 хвилини вступу до різних типів приєднання.
fvu

Відповіді:


153

Документація на 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 не є відповідним місцем для такого рівня обговорення.


1
Ніколи не чув про приєднання хреста чи потрібного такого… до сьогодні!
goos

11

Дивіться приклад в веб-сайті http://www.sitepoint.com/understanding-sql-joins-mysql-database/

Ви можете використовувати "USING" замість "ON", як у запиті

SELECT * FROM table1 LEFT JOIN table2 USING (id);

3
Для додаткового уточнення стовпчик приєднання в обох таблицях повинен бути однаковим іменем USING для роботи
rmirabelle
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.