我有这样的查询:
SELECT
*
FROM
table1,
table2
我知道这有点等同于:
SELECT
*
FROM
table1
INNER JOIN
table2
ON ???
但是,连接的结果ON子句是什么?
在SSMS中进行一些测试之后,这是我的发现
SELECT * FROM table1,table2
提供与
相同的执行计划和相同的记录SELECT * FROM table1 INNER JOIN table2 ON 1=1
与
相同SELECT * FROM table1 CROSS JOIN table2
答案 0 :(得分:1)
定义其关系的列。
SELECT *
FROM table1
INNER JOIN table2
ON table1.ID = table2.ID
实际上您显示的查询不是equal
。第一个产生两个表中所有记录的笛卡尔积,或者换言之CROSS JOIN
。
答案 1 :(得分:1)
SELECT
*
FROM
table1,
table2
相当于:
SELECT
*
FROM
table1
CROSS JOIN
table2
没有CROSS JOIN的ON语句。如果需要过滤CROSS JOIN,请将其放在WHERE子句中。
WHERE table1.DateCreated <= table2.DateModified
答案 2 :(得分:0)
在SSMS中进行一些测试之后,这是我的发现
SELECT * FROM table1,table2
提供与
相同的执行计划和相同的记录SELECT * FROM table1 INNER JOIN table2 ON 1=1
与
相同SELECT * FROM table1 CROSS JOIN table2