MySQL:CROSS JOIN意外行为

时间:2017-07-28 20:26:11

标签: mysql sql database join phpmyadmin

世界!

关于MySQL的教科书部分我读过:

“假设您使用CROSS JOIN连接两个表。结果集将包括两个表中的所有行,其中结果集中的每一行都是第一个表中的行与第二个表中的行的组合table。当你在连接表之间没有关系时会发生这种情况。“

因此,如果我理解正确,则上述意思是:如果表格具有关系CROSS JOIN,则不会将table_one中的每一行与table_two中的每一行合并。

但我的测试表有关系(外键)。

table_one有用户的数据,table_two有订单数据。

来自user_id

table_two与来自id

table_one相关

但是SELECT * FROM table_one CROSS JOIN table_two继续组合两个表中的每一行。为什么呢?

感谢您的时间和帮助!

1 个答案:

答案 0 :(得分:2)

文档意味着当两个表之间没有关系时,通常使用CROSS JOIN

CROSS JOIN总是生成两个表/子查询的笛卡尔积,无论是否存在关系。

请注意,如果任一表为空,则结果集也为空。