1

所以我刚刚遇到了一些有趣的事情,我不知道以前是否有人回答过,因为我不知道它叫什么。假设您有两张桌子;第一个有一行,第二个有两行。如果您运行以下语句:

SELECT t1.*
FROM table1 t1, table2 t2

它返回两行,并且都具有相同的值,但第一个表只有一行!为什么会出现这种情况?如果您没有相应地更改 select 子句,我认为 from 子句中的另一个表不会改变任何内容。

4

1 回答 1

6

您正在选择两个表的笛卡尔积

它将返回COUNT(t1) * COUNT(t2)记录:来自的记录t1与来自的记录的所有可能组合t2

使用ANSI语法,您的查询将读取为:

SELECT  t1.*
FROM    table1 t1
CROSS JOIN
        table2 t2
于 2012-06-07T16:49:07.803 回答