SQL:为什么我突然从这个声明中获得了200多行?

Wil*_*iam 1 sql sql-server-2008

最初的陈述是:

Select
     A.a,
     B.b
FROM
     A,
     B
WHERE
     A.c = B.C
Run Code Online (Sandbox Code Playgroud)

我添加了这个并获得了200多万行:

Select
     A.a,
     B.b,
     C.d
FROM
     A,
     B,
     C
WHERE
     A.c = B.C
     AND
     C.c = A.c
Run Code Online (Sandbox Code Playgroud)

CI正在尝试添加的表只有55,000行,而其他两个表要大得多.

Sea*_*ean 6

你得到的是交叉产品,而不是真正的加入.这非常昂贵.

我建议将其重写为:

select a.a, b.b, c.d
from a
join b on a.c = b.c
join c on c.c = a.c
Run Code Online (Sandbox Code Playgroud)

它会明显更快,并可能为您提供所需的结果.


chm*_*lig 5

听起来你不小心产生了一些笛卡尔积.似乎某些表有多个具有相同C值的行,并且您正在获得重复项.看看每个表中C的唯一性.

我使用更清晰,更明确的新样式连接语法重写它:

SELECT A.a, B.b, C.d
FROM A
JOIN B on A.c = B.c
JOIN C on A.c = C.c
Run Code Online (Sandbox Code Playgroud)