SQL语句显示比表更多的行

时间:2012-06-07 16:47:32

标签: sql oracle

所以我刚刚遇到了一些有趣的东西,我不知道之前是否已经回答过,因为我不知道它叫什么。可以说你有两张桌子;第一行有一行,第二行有两行。如果您运行以下语句:

SELECT t1.*
FROM table1 t1, table2 t2

它返回两行,两者都有相同的值,但第一个表只有一行!为什么会这样?如果你没有相应地更改select子句,我不认为在from子句中有另一个表改变了什么。

1 个答案:

答案 0 :(得分:6)

您正在选择两个表中的cartesian product

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

使用ANSI语法,您的查询将显示为:

SELECT  t1.*
FROM    table1 t1
CROSS JOIN
        table2 t2