与来自 JOIN 的 WHERE 一起加入 [重复]

Posted

技术标签:

【中文标题】与来自 JOIN 的 WHERE 一起加入 [重复]【英文标题】:JOIN with WHERE from JOIN [duplicate] 【发布时间】: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,所以我不能直接引用它。由于“激活”列来自连接,我无法直接引用它 【参考方案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 字段上

以上是关于与来自 JOIN 的 WHERE 一起加入 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将索引与 where 和 join 子句一起使用

一个奇怪的 Oracle SQL,它来自 3 个表,但在 where 子句中只留下了 join 2?

SQL左连接与JOIN条件中的过滤器与WHERE子句中的过滤器[重复]

MySQL 性能:加入与 WHERE [重复]

在codeigniter中一起更新和加入查询?

将 join 与 delete 语句一起使用时出现语法错误 [重复]