【问题标题】:JOIN with WHERE from JOIN [duplicate]与来自 JOIN 的 WHERE 一起加入 [重复]
【发布时间】:2019-09-24 13:00:26
【问题描述】:

我有多个表,其中包含一些客户端的数据。我想要实现的是输出某个客户在第一个月被计费的金额。

所以我运行类似于下面的代码:

SELECT company,clientid,COALESCE (signed.value,reactivated.value) as 'Activation' , Amount FROM `tblclients`
LEFT JOIN tblcustomfieldsvalues  as signed  ON tblclients.clientid = signed.relid and signed.fieldid = 5
LEFT JOIN tblcustomfieldsvalues  as reactivated ON tblclients.userid = reactivated.relid and reactivated.fieldid = 27
LEFT JOIN (
    SELECT clientid,sum(total) as Amount FROM tblinvoices  
    WHERE month(invoicedate)=month(Activation) Group by clientid) as f on tblclients.clientid = f.clientid 

我的问题是,当我进行最后一次连接时,它给出了一个错误:'where 子句'中的未知列'Activation'。 如果我将其切换为 current_date,则查询的其余部分将起作用。

知道如何进行这项工作吗?

稍后编辑:我可能过度简化了查询,我也有一个 COALESCE

【问题讨论】:

  • 加入时不能使用别名。尝试使用您的实际列名
  • 您不能在WHERE 子句中使用别名。只需将Activation 替换为它的定义,即activated.value
  • 我也有一个 COALESCE,所以我不能直接引用它。由于“激活”列来自连接,我无法直接引用它

标签: mysql sql join


【解决方案1】:

你可以试试下面-

SELECT company,clientid,activated.value as Activation , Amount 
FROM `tblclients`LEFT JOIN tblcustomfieldsvalues as signed ON tblclients.clientid = signed.relid and signed.fieldid = 5
LEFT JOIN 
( SELECT clientid,sum(total) as Amount 
  FROM tblinvoices Group by clientid
) as f on tblclients.clientid = f.clientid and month(invoicedate)=month(Activation)

【讨论】:

  • 同样的错误,但在 invoicedate 字段上
猜你喜欢
  • 2015-02-15
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 2021-12-30
  • 2013-08-11
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多