(Teradata版) - 获取所有记录以及另一个表中的所有相应记录

时间:2017-04-10 22:33:29

标签: sql optimization teradata exists

可以针对Teradata优化以下查询吗?

我们需要小表A中的所有记录,以及大表B中与非唯一键匹配的所有相应记录

或者换句话说:除了A之外的所有东西,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
              );

感谢您的帮助!

====== UPDATE ====
基于this MySQL question中的quanos答案,在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实例..

1 个答案:

答案 0 :(得分:0)

我不确定它是否是拼写错误,但是在WHERE子句之后你有一个冗余的select查询。此外,您必须在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)

希望它有所帮助。如果对上述查询有任何疑问,请告诉我。