【发布时间】: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) 让它工作了谢谢