CROSS JOIN 什么时候有用?

When is CROSS JOIN useful?

当我阅读有关 CROSS JOIN 的文档时,我感到疑惑,因为它似乎毫无意义。您可以只使用逗号 , 来做到这一点。我对其进行了测试(多次),这些查询的结果完全相同:

// one
SELECT * FROM table1 CROSS JOIN table2

// two
SELECT * FROM table1, table2

无论如何,我想知道:使用 CROSS JOIN 而不是 , 是否有合理的理由?

除了从不在 from 子句中使用逗号并始终使用显式 join 语法这一简单规则外,还有一个很好的理由。问题是这两个查询之间的区别:

select *
from table1, table2;

select *
from table1 table2;

它们做的事情非常不同,并且很难发现差异(尤其是在更复杂的查询中)。如果您从不在 FROM 子句中使用逗号,那么您的查询将更易于阅读并且不易出现拼写错误和其他问题。

考虑以下...

EXPLAIN EXTENDED
SELECT * FROM my_table, my_table x;

SHOW WARNINGS; (reformatted for clarity)

select test.my_table.id AS id
     , test.my_table.car_id AS car_id
     , test.my_table.car_model AS car_model
     , test.my_table.car_features AS car_features
     , test.x
     . id AS id
     , test.x.car_id AS car_id
     , test.x.car_model AS car_model
     , test.x.car_features AS car_features 
  from test.my_table 
  join test.my_table x