2017-04-10 5 views
0

次のクエリをTeradata用に最適化できますか?(Teradataバージョン) - すべてのレコードと、対応するすべてのレコードを別のテーブルに取得します。

私たちは、非固有キー

あるいは、言い換えれば上で、大きなテーブルBからその試合を小さなテーブルAからのすべてのレコードに加え、対応するすべてのレコードを必要とする:Aに一致していないBからのすべてを除くすべて

多分JOINの何か?または、非相関クエリであるSubselectは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 
      ); 

ありがとうございました!

=========非相関サブクエリとthis MySQL questionでquanos回答に基づいたUPDATE ====
、以下しまうの文は、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 
) 

私は..だけ自宅でのOracleインスタンスを持つ、現在のTeradataに

+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にマッチさせたくありませんでしたが、非ユニークなのでDISTINCTを追加しました – Rusty75

+0

ok - そのポストで言及されているように、この追加の副選択が本当に必要かどうか疑問に思っています...私はあなたの意見を見ます、それは私には役に立たないようです...?たぶんそれは単なるMySQLの欠陥です。それを削除しました.. – Rusty75

関連する問題