2017-04-10 102 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

相關問題