原始陈述是:
Select
A.a,
B.b
FROM
A,
B
WHERE
A.c = B.C
我添加了这个并获得了200多万行:
Select
A.a,
B.b,
C.d
FROM
A,
B,
C
WHERE
A.c = B.C
AND
C.c = A.c
我想要添加的表C只有55,000行,而其他两个表要大得多。
答案 0 :(得分:6)
你正在获得跨产品,而不是真正的加入。这非常昂贵。
我建议将其重写为:
select a.a, b.b, c.d
from a
join b on a.c = b.c
join c on c.c = a.c
它会明显更快,并且可能会为您提供所需的结果。
答案 1 :(得分:5)
听起来你不小心产生了一点cartesian product。似乎某些表具有多个具有相同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
答案 2 :(得分:1)
使用连接语法时
FROM A, B, C
您的结果集将是
的产物来自C *行的B *#行的A *#行中的行
因此,如果每个表有1000行,那么结果集将有1,000,000,000行
答案 3 :(得分:-1)
Select
A.a,
B.b,
C.d
FROM
A,
B,
C
WHERE
A.c = B.C
AND
C.c = A.c
AND
C.c = B.C
您的代码正试图单独加入B,C和A.