2016-11-23 5 views
1
SELECT T1.AC_NO FROM TALE1 T1 
INNER JOIN TABLE2 T2 
ON T1.AC_NO= 
CASE 
    WHEN T2.COMMON_KEY LIKE '%~%' AND T2.COMMON_KEY IS NOT NULL 
     THEN GET_VALUE_VARCHAR(ARRAY_SPLIT(T2.COMMON_KEY,'~'),2) 
    ELSE T2.COMMON_KEY 
END 

DATA:QUERY ABOVEarray_splitの使用中にnetezzaで無効なインデックスIDエラーを処理する方法は?表1に

AC_NO 
1 
2 
3 
4 

TABLE2

、DATA IN
COMMON_KEY 

A~1~EF 
B~2~CD 
3 
4 

OF ERROR例外:ネティーザはのTHEN式を評価何らかの理由で

ERROR [HY000] ERROR: 0 : Invalid Index Id

+0

あなたは両方を明確にしてくださいでした:私の提案は、ケース内の文字列の末尾に余分な「〜」を連結することであろうシナリオ、そして達成しようとしていること。ありがとうございました。 –

+0

は両方のテーブルの列の値を比較し、自分の要件に一致するデータを取得します。2番目のテーブルには最初のテーブルと同じデータが含まれていますが、さらにデータが一意になるように(つまりA〜1〜EF) – pyennamp

答えて

1

をUDFが関係するケース(SQLエクステンション・ツールキットの配列機能があなたのものですWHERE式が真であるかどうかは問わない)。

ここで起こっていることは、この動作のために、1つの要素だけを持つ配列から2番目の要素を引っ張って、GET_VALUE_VARCHAR(...、2)を実行しようとすると "無効なインデックスID" )は、CASEがそれをテストする必要はないと思うかもしれませんが、1つの値(例えば3と4)だけの配列では、

THEN式を無視しないで回避することができます。

SELECT T1.AC_NO 
FROM TABLE 1T1 
INNER JOIN TABLE2 T2 
ON T1.AC_NO= 
CASE 
    WHEN T2.COMMON_KEY LIKE '%~%' AND T2.COMMON_KEY IS NOT NULL 
     THEN GET_VALUE_VARCHAR(ARRAY_SPLIT(T2.COMMON_KEY,'~'),min(array_count(ARRAY_SPLIT(T2.COMMON_KEY,'~')),2)) 
    ELSE T2.COMMON_KEY 
END; 
+0

Netezzaは「遅延評価」を行っていません。 – Andrew

2

スコットは何かに乗っています。決して失敗しないようにしてください。

SELECT T1.AC_NO 
FROM TABLE 1T1 
INNER JOIN TABLE2 T2 
ON T1.AC_NO= 
CASE 
    WHEN T2.COMMON_KEY LIKE '%~%' AND T2.COMMON_KEY IS NOT NULL 
     THEN GET_VALUE_VARCHAR(ARRAY_SPLIT(T2.COMMON_KEY||'~','~'),2)) 
    ELSE T2.COMMON_KEY 
END; 

好みの問題、私はそれがより読み見つける:)

関連する問題