【问题标题】:Mysql nested select query inside havingMysql嵌套选择查询里面有
【发布时间】:2021-07-09 19:13:52
【问题描述】:

Mysql 说“错误代码:1054。'where 子句'中的未知列'ju.id'”

为什么我不能在嵌套选择中使用别名 ju。我订购查询的方式有什么问题吗?

SELECT `ac`.`name`, COALESCE(SUM(tr.amount*ju.rate), 0) as amount 
FROM `transactions` `tr` 
LEFT JOIN `journals` `ju` ON `tr`.`journal_id` = `ju`.`id` 
LEFT JOIN `accounts` `ac` ON `ac`.`id` = `tr`.`account` 
WHERE `ju`.`txn_date` >= UNIX_TIMESTAMP('2021-01-01 00:00:00') 
  AND `ju`.`txn_date` <= UNIX_TIMESTAMP('2021-07-08 23:59:59') 
  AND `tr`.`type` = 'debit' 
  AND (`ac`.`bank` = 1 OR `ac`.`cash` = 1) 
  AND `ac`.`business` = 201 
GROUP BY `ac`.`id` 
HAVING ( SELECT tra.id 
         FROM transactions tra 
         LEFT JOIN accounts acc ON `acc`.`id` = `tra`.`account` 
         WHERE `tra`.`journal_id` = `ju`.`id` 
           AND `tra`.`type` = 'credit' 
           AND `acc`.`category` IN ('Sales Revenue','Other Income')
       ) IS NOT NULL;

【问题讨论】:

  • 嵌套循环? SQL 中没有循环之类的东西。
  • GROUP BY ac.id 之后,ju.id 的值不存在。尝试使用,例如MAX(ju.id)(我希望一个组中的所有ju.id 值都相同)。
  • 你加入错了。它们的行为就像内部连接而不是外部连接。
  • @stickybit 我的错,这是一个错字。编辑问题应该嵌套“选择”
  • @Akina 使用 MAX(ju.id) 让它工作了谢谢

标签: mysql nested alias


【解决方案1】:

我认为正确的解释是 HAVING 之后的子查询(括号之间)使顶级查询中的别名“ju”超出范围。

我以前从未使用过 HAVING,但我的解决方案是将“期刊”表添加到具有所需条件的子查询中。但这实际上取决于您要查询的内容。

【讨论】:

  • 有一个名为 journals 的主表,我在其中记录日记帐分录的常见详细信息,例如日期、货币等......然后有一个交易表,我保存与日记帐相关的每笔交易(贷方和借方) .我想选择与“销售收入”或“其他收入”类别帐户相关联的同一日记帐分录存在贷方分录的所有借记分录
猜你喜欢
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 2018-05-08
  • 2013-01-19
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 2012-05-22
相关资源
最近更新 更多