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
当我阅读有关 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