我是数据库的新手,并且正在发布工作中的问题。我在Aster Studio 6.0中创建了一个表,但是有一个关于模糊列的错误。我在Teradata SQL Assistant中运行了相同的查询,但没有收到错误。
我有六个表,其中包含数百万行,名为EDW.SWIFTIQ_TRANS_DTL,EDW.SWIFTIQ_STORE,EDW.SWIFTIQ_PROD,EDW.STORE_XREF,EDW.TDLNX_STR_OUTLT和EDW.SURV_CWC。
EDW代表原始数据库,但列标有别名。
我在trim()
列上进行了VARCHAR
以节省假脱机空间。对于有关TDLNX_RTL_OUTLT_NBR的错误,我在两个不同表的类似列上执行了INNER JOIN
。在SQL Assistant中进行预览时,有一个临时表只有一列名为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'很暧昧。
编辑:忘记包含有关表别名的说明。 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。
答案 0 :(得分:1)
在Teradata中尝试CREATE TABLE AS SELECT
时,会出现同样的错误。有三个列名称SRC_SYS_NM
& SRC_SYS_PROD_ID
& SRC_SYS_STORE_ID
,在SELECT中多次使用(具有不同的表别名)。
添加列别名以使这些名称唯一,例如trans_SRC_SYS_NM
代替d.SRC_SYS_NM
。
此外,连接中的TRIM是一个非常糟糕的主意。您可能不会保存那么多假脱机,但强制优化器重新分配所有假脱机以进行连接准备。