可以针对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实例..
答案 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)
希望它有所帮助。如果对上述查询有任何疑问,请告诉我。