在 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 是一个非常糟糕的主意。您可能不会节省那么多假脱机,但会强制优化器重新分配所有假脱机以进行连接准备。
我是数据库的新手,正在发布工作中的问题。我正在 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 是一个非常糟糕的主意。您可能不会节省那么多假脱机,但会强制优化器重新分配所有假脱机以进行连接准备。