在 Aster Studio 6.0 中创建 table 时出现歧义列错误

Ambiguous column error creating table in Aster Studio 6.0

我是数据库的新手,正在发布工作中的问题。我正在 Aster Studio 6.0 中创建一个 table,但收到关于不明确列的错误。我 运行 在 Teradata SQL Assistant 中进行相同的查询,但没有收到错误。

我有六个 table,其中有数百万行名为 EDW.SWIFTIQ_TRANS_DTL、EDW.SWIFTIQ_STORE、EDW.SWIFTIQ_PROD、EDW.STORE_XREF、EDW.TDLNX_STR_OUTLT 和EDW.SURV_CWC。

EDW 表示原始数据库,但列标有别名。

我在 VARCHAR 列上做了 trim() 以保存假脱机 space。对于关于 TDLNX_RTL_OUTLT_NBR 的错误,我对来自两个不同 table 的相似列执行了 INNER JOIN。在 SQL 助手中进行预览时,有一个临时的 table,只有一列名为 TDLNX_RTL_OUTLT_NBR。

这是 SQL 查询:

CREATE TABLE public.table_name

DISTRIBUTE BY HASH (SRC_SYS_PROD_ID) AS (

SELECT * FROM load_from_teradata(

ON public.load_from_teradata_dummy

TDPID(‘database_name')

USERNAME(’user_name')

PASSWORD(’ss')

QUERY ('SELECT e.TDLNX_RTL_OUTLT_NBR, e.OUTLT_ST_ADDR_TXT, e.STORE_OUTLT_ZIP_CD, d.TRANS_ID, d.TRANS_DT,

d.TRANS_TM, d.UNIT_QTY, d.SRC_SYS_STORE_ID, d.SRC_SYS_PROD_ID, d.SRC_SYS_NM, a.SRC_SYS_STORE_ID, a.SRC_SYS_NM, a.STORE_NM,

a.CITY_NM, a.ZIP_CD, a.ST_cd, p.SRC_SYS_PROD_ID, p.SRC_SYS_NM, p.UPC_CD, p.PROD_ID, f.SRC_SYS_STORE_ID, f.SRC_SYS_NM,

f.TDLNX_RTL_OUTLT_NBR, g.SURV_CWC_WSLR_CUST_PARTY_ID, g.AGE_CD, g.HIGH_END_ACCT_FLG, g.RACE_ETHNC_CD, g.OCCPN_CD

FROM EDW.SWIFTIQ_TRANS_DTL d

INNER JOIN EDW.SWIFTIQ_STORE a

    ON trim( a.SRC_SYS_STORE_ID) = trim(d.SRC_SYS_STORE_ID)

INNER JOIN EDW.SWIFTIQ_PROD p

    ON trim(p.SRC_SYS_PROD_ID) = trim(d.SRC_SYS_PROD_ID)

    and p.SRC_SYS_NM = d.SRC_SYS_NM

INNER JOIN EDW.STORE_XREF f

    ON trim(f.SRC_SYS_STORE_ID) = trim(a.SRC_SYS_STORE_ID)

INNER JOIN EDW.TDLNX_STR_OUTLT e

    ON trim(e.TDLNX_RTL_OUTLT_NBR)= trim(f.TDLNX_RTL_OUTLT_NBR)

INNER JOIN EDW.SURV_CWC g

    ON g.SURV_CWC_WSLR_CUST_PARTY_ID = e.WSLR_CUST_PARTY_ID

WHERE TRANS_DT between ''2015-01-01'' and ''2015-03-31''')

num_instances('4') ) );

错误:列引用 'TDLNX_RTL_OUTLT_NBR' 不明确。

编辑: 忘记包含关于 table 别名的描述。 a 代表 EDW.SWIFTIQ_STORE,p 代表 EDW.SWIFTIQ_PROD,f 代表 EDW.STORE_XREF,e 代表 EDW.TDLNX_STR_OUTLT,g 代表 EDW.SURV_CWC,d 代表 EDW.SWIFTIQ_TRANS_DTL。

在 Teradata 中尝试 CREATE TABLE AS SELECT 时,您会遇到同样的错误。 SRC_SYS_NM & SRC_SYS_PROD_ID & SRC_SYS_STORE_ID 三个列名称在 SELECT.[=16 中被多次使用(使用不同的 table 别名) =]

添加列别名以使这些名称唯一,例如trans_SRC_SYS_NM 而不是 d.SRC_SYS_NM

此外,连接中的 TRIM 是一个非常糟糕的主意。您可能不会节省那么多假脱机,但会强制优化器重新分配所有假脱机以进行连接准备。