【问题标题】:Left Join - Unknown Column?左连接 - 未知列?
【发布时间】:2016-10-07 17:16:44
【问题描述】:

你能帮我解决我的问题吗?我不断收到一条错误消息,指出“错误代码:1054。'on 子句'中的未知列'cdata.customerid'”

如果我想在 customerdata 表和 order 表中附加客户 ID 匹配的左连接数据,我该如何实现?我一定不明白 SQL 在什么时候允许查询的不同部分访问数据。

select 

cdata.customerid, 
cdata.affiliate, 
cdata.firstname,
cdata.address1,
cdata.address2,
cdata.city,
cdata.state,
cdata.postalcode,
cdata.emailaddress,
cdata.active


from customerdata cdata, order a

left join
(select 
a.transactiondate, 
sum(a.TransactionAmount), 
a.id 
from order a
group by a.id) 

txns on a.id = cdata.customerid

where cdata.active = "A";

【问题讨论】:

  • 我想我以前从没见过order这样用过;那是您架构中的表吗?
  • @Uuerdo order 显然是表的名称。
  • 为什么ONtxns 的连接子句指的是acdata,而不是txns
  • 在与 MySQL 关键字重叠的表/列名称上使用反引号有助于防止这种混淆。例如from `order` a.

标签: mysql


【解决方案1】:

on 子句中,您必须指定属于参与join 子句的表的字段。因此,如果您要使用 txns 子查询加入 cdata,您可能必须加入 txns.idcdata.customerid。您可能还想从子查询中获取总和,因此您必须将此字段包含在您的主要 SELECT 子句中。而且您可能必须在 group by 子句中指定 transactiondate 字段,至少这对于 ORACLE DB 是必需的,我不确定 MySQL 是否是这种情况:

select 

cdata.customerid, 
cdata.affiliate, 
cdata.firstname,
cdata.address1,
cdata.address2,
cdata.city,
cdata.state,
cdata.postalcode,
cdata.emailaddress,
cdata.active,
txns.tsum,
txns.transactiondate 

from customerdata cdata

left join
(select 
 a.transactiondate, 
 sum(a.TransactionAmount) tsum, 
 a.id 
 from order a
 group by a.id, a.transactiondate) txns 
on txns.id = cdata.customerid

where cdata.active = "A";

【讨论】:

    【解决方案2】:

    JOIN引用了'order'表和'txns'表,这里不涉及'cdata',所以在join的上下文中cdata.customerid不存在。

    【讨论】:

    • 如果我想在客户数据表和订单表中附加客户ID匹配的左连接数据,我该如何实现?我一定不明白 SQL 在什么时候允许查询的不同部分访问数据。
    猜你喜欢
    • 2011-02-18
    • 2022-08-18
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    相关资源
    最近更新 更多