如何解决SQL JOIN操作中的Ambiguous column name错误
解决SQL JOIN中的歧义列错误
问题原因
你查询的SELECT子句里的[NAME]列未指定所属表/别名,而当前关联的表(CUSTINVOICETRANS别名INVOICE、INVENTITEMGROUP别名INVENTGROUP)中同时存在[NAME]列,数据库无法判定你要取哪一个表的[NAME],因此抛出Ambiguous column name错误。
修改后的查询语句
SELECT [SALESID] ,[INVOICEID] ,[INVOICEDATE] ,[LINENUM] ,[PRICEUNIT] ,[DISCPERCENT] ,[LINEAMOUNT] ,[TRANSACTIONCODE] ,[DELIVERYTYPE] ,[LINEPERCENT] ,[DLVDATE] ,[INVENTQTY] ,[INVENTREFTYPE] ,[REMAINBEFORE] ,[QBE_COSTPRICE] ,[QBE_ITEMTXT] ,[MODIFIEDDATETIME] ,[CREATEDDATETIME] ,[ISSM_WARRANTYPACKNAME] ,[QBE_LINEAMOUNTMSTPURCHEXCHDATE] ,[DATAAREAID] ,[ITEMID] ,[QTY] ,[CURRENCYCODE] ,[SALESPRICE] ,[Brand] ,[CostCenter] ,[Department] ,INVENTGROUP.[NAME] -- 指定表别名,明确取品类组的名称 ,INVOICE.[RECID] ,INVOICE.[ITEMGROUPID] FROM [ELG_DynamicsAX_DWH].[dbo].[CUSTINVOICETRANS] AS INVOICE JOIN(SELECT[Brand] ,[CostCenter] ,[Department] ,[RECID] From [ELG_DynamicsAX_DWH].[dbo].[CustInvoiceTransFinDim]) AS FINDIM ON FINDIM.RECID = INVOICE.RECID JOIN(SELECT[NAME] ,[ITEMGROUPID] From [ELG_DynamicsAX_DWH].[dbo].[INVENTITEMGROUP]) AS INVENTGROUP ON INVENTGROUP.ITEMGROUPID = INVOICE.ITEMGROUPID
额外建议
- 多表JOIN场景下,养成所有列都指定表别名的习惯,既能彻底避免歧义列问题,也能让SQL语句更易读。
- 若你实际需要的是主表
INVOICE的[NAME],将上述语句中的INVENTGROUP.[NAME]改成INVOICE.[NAME]即可。
内容的提问来源于stack exchange,提问作者user19845843
相关产品推荐
相关产品推荐

