如何在没有ON条件的情况下使用mysql JOIN?

Ale*_* T. 90 mysql join inner-join left-join right-join

是否可以在没有ON语句的情况下编写连接查询?以及这些联接如何LEFT JOIN, RIGHT JOIN起作用.

Gor*_*off 126

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
Run Code Online (Sandbox Code Playgroud)

比以下更好:

from A, B
Run Code Online (Sandbox Code Playgroud)

和:

from A join B -- with no on clause
Run Code Online (Sandbox Code Playgroud)

on右边或左外连接需要该子句,因此讨论与它们无关.

如果您需要了解不同类型的连接,那么您需要对关系数据库进行一些研究.Stackoverflow不适合该级别的讨论.


Man*_*anu 8

请参阅http://www.sitepoint.com/understanding-sql-joins-mysql-database/中的一些示例

您可以在查询中使用"USING"而不是"ON"

SELECT * FROM table1 LEFT JOIN table2 USING (id);
Run Code Online (Sandbox Code Playgroud)

  • 为了进一步说明,两个表中的连接列必须具有相同的命名,以便USING工作 (3认同)

Nee*_*ell 5

有多种方法可以进行交叉连接或笛卡尔积:

SELECT column_names FROM table1 CROSS JOIN table2;

SELECT column_names FROM table1, table2;

SELECT column_names FROM table1 JOIN table2;

忽略on第三种情况中的条件会导致交叉连接。