2017-04-10 103 views
0

可以针对Teradata优化以下查询吗?(Teradata Version) - 获取所有记录以及另一个表中的所有相应记录

我们需要小桌子的所有记录,再加上从大表B中所有相应记录,在一个非唯一键

或者那场比赛,换句话说:一切,除了所有的B已在A.不匹配

也许加入JOIN?或者是一个不相关的查询的子选择,这是否也适用于Teradata?

SELECT a.nonunique 
     , a.colX 
    FROM small_tab a 
UNION ALL 
SELECT b.nonunique 
     , b.colY 
    FROM large_tab b 
WHERE EXISTS (
       SELECT 1 
        FROM small_tab a 
       WHERE a.nonuniqe = b.nonunique 
      ); 

感谢您的帮助!

=========与非相关子查询基于quanos在this MySQL question答案更新====
,将下面的语句是更快也Teradata的?

SELECT a.nonunique 
     , a.colX 
    FROM small_tab a 
UNION ALL 
SELECT b.nonunique 
     , b.colY 
    FROM large_tab b 
WHERE b.nonunique IN 
(
    SELECT DISTINCT nonunique 
     FROM small_tab 
    GROUP BY nonunique 
) 

我不能在Teradata的测试目前,只能在家里有一个Oracle实例..

+0

你真的需要'UNION'吗?独特的处理是一项巨大的开销,“UNION ALL”会更快。 – dnoeth

+0

谢谢,我监督了这一点。它来自我第一次使用的另一个选择,我认为效率较低(涉及返回重复的连接)。更新.. – Rusty75

回答

0

我不知道它是否是一个错字,但你必须WHERE子句后,在冗余选择查询。另外,您必须在WHERE Claue中使用的SELECT查询中使用相同的列名称。 以下查询在Teradata中正常工作。

SELECT a.nonunique, a.colX 
FROM small_tab a 
UNION ALL 
SELECT b.nonunique, b.colY 
FROM large_tab b 
WHERE b.id IN(
    SELECT **id** 
    FROM small_tab) 

希望它有帮助。如果有任何查询上面的查询,请让我知道。

+0

嗨。不是拼写错误,而是故意的 - 额外的子选择强制选择内部是一个不相关的子查询,请参阅提到的链接。这在MySQL中工作,我想知道它是否也是Teradata更高性能.. – Rusty75

+0

实际上,我犯了另一个错字,我不想在id上匹配,但在nonunique ..因此我添加了DISTINCT – Rusty75

+0

确定另一个评论 - 我现在怀疑我们是否真的需要这篇文章中提到的额外的子选择...我明白你的观点,对我来说这似乎有点无用......?也许这只是一个MySQL漏洞。删除它.. – Rusty75

相关问题