在对它们进行采样之后进行两个表的连接

时间:2016-11-07 16:39:12

标签: sql join teradata

我在连接两个表之后需要一个示例,例如:

SELECT  *
from 
A left join B 
on A.col=B.col
sample 1000000

问题是A和B是巨大的(超过30亿行),当我尝试加入时,我的虚拟空间用完了。

有没有办法在样本之后进行连接,以便它连接较小的表(例如从A和B中选择10,000,000个样本,内部连接它们,并从连接中选择1,000,000,希望我得到至少1,000,000行?)

P.S。 我正在使用teradata

4 个答案:

答案 0 :(得分:1)

您可以按照建议执行操作,将SAMPLE应用于派生表:

SELECT  *
from 
 (
  SELECT * FROM A 
  SAMPLE 10000000
 ) AS A
left join B 
on A.col=B.col

类似于内部联接

SELECT  *
from 
 (
  SELECT * FROM A
  SAMPLE 100000000 -- larger sample than needed 
 ) AS A
join B 
on A.col=B.col
sample 10000000

答案 1 :(得分:0)

您可以尝试使用flag加入子查询来限制大小:

SAMPLE

答案 2 :(得分:0)

SELECT * INTO #A FROM A SAMPLE 1000000;

接着是

SELECT * FROM #A left join B on #A.Col = B.col;

我要记住,在你的原始查询中,你似乎要求任何1000000的A,然后LEFT JOIN到B哪里有一个批处理,或者如果没有匹配则返回B为空 - 我' m假设它也是1-1或1-0加入 - 否则它与你原来的想法不符合

答案 3 :(得分:0)

SELECT  *
from 
(select * from A sample 1000000) A left join B 
on A.col=B.col