1

我有一个这样的查询:

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
4

3 回答 3

1

定义它们关系的列。

SELECT  *
FROM  table1 
      INNER JOIN table2
           ON table1.ID = table2.ID

实际上您显示的查询不是equal。第一个产生两个表上所有记录的笛卡尔积,换句话说CROSS JOIN

于 2012-11-02T15:25:45.050 回答
1
SELECT
    *
FROM
    table1,
    table2

相当于:

SELECT 
    * 
FROM 
    table1
CROSS JOIN 
    table2

没有带有 CROSS JOIN 的 ON 语句。如果需要过滤 CROSS JOIN,请将其放在 WHERE 子句中。

WHERE table1.DateCreated <= table2.DateModified
于 2012-11-02T15:31:24.027 回答
0

在 SSMS 中进行一些测试后,这是我的发现

SELECT * FROM table1,table2

给出相同的执行计划和相同的记录

SELECT * FROM table1 INNER JOIN table2 ON 1=1

同样的事情

SELECT * FROM table1 CROSS JOIN table2
于 2012-11-30T19:19:02.727 回答