AC_NO
1
2
3
4
表1中的数据:
COMMON_KEY
A~1~EF
B~2~CD
3
4
表2中的数据
<script>
MktoForms2.whenReady( function(form) {
//set the first result as local variable
var mktoLeadFields = mktoLead.result[0];
//map your results from REST call to the corresponding field name on the form
var prefillFields = {
"Email" : mktoLeadFields.email,
"FirstName" : mktoLeadFields.firstName,
"LastName" : mktoLeadFields.lastName,
"Company" : mktoLeadFields.company
};
//pass our prefillFields objects into the form.vals method to fill our fields
form.vals(prefillFields);
}
);
</script>
以上查询错误:
错误[HY000]错误:0:索引ID无效
答案 0 :(得分: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;
是一个偏好的问题,但我发现它更具可读性:)
答案 1 :(得分:1)
无论出于何种原因,Netezza都会评估涉及UDF的案例的THEN表达式(您正在使用的SQL Extention Toolkit中的数组函数恰好是这样),无论WHERE表达式是否为真。
这里发生的是因为这种行为,它试图从只有一个元素的数组中拉出第二个元素,当它尝试执行GET_VALUE_VARCHAR(...,2)时,会出现“无效索引ID”错误在只有1个值(例如3和4)的数组上,即使你认为CASE永远不需要测试它。
可以通过使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;