MySQL问题记录之select后面子查询别名失效问题

今天写SQL语句的时候碰到一个问题,select后面子查询别名失效问题.
这是我一开始写的一个代码:

SELECT
	sum( IFNULL( money, 0 ) ) money,
	salesman_id 
FROM
	(
	SELECT
		salesman_id,
		(
		SELECT
			r.money 
		FROM
			( SELECT order_id, sum( money ) money FROM b_order_receivables WHERE NAME != '保障金' AND state = 2 GROUP BY order_id ) r 
		WHERE
			r.order_id = o.id 
		)* o.commission / 100 AS money 
	FROM
		b_order o 
	WHERE
		deleted = 0 
		AND salesman_id IS NOT NULL 
		AND money IS NOT NULL 
	) s 
GROUP BY
	s.salesman_id

然后执行的时候直接报错了;
在这里插入图片描述
说where子句”中的“money”列未知也就是别名没有被识别出来;
这里当时我就很奇怪这个代码写得没毛病呀怎么就别名出不来了,然后我又想了一会MYSQL如何定义别名的

字段 AS “别名” (其中AS可以省略不写, 别名用引号引起来,引号可以是双引号,也可以是单引号,建议大家使用双引号)

所以我又加上双引号试了一下.

-- 查询业务员下提成
SELECT
	sum( IFNULL( money, 0 ) ) money,
	salesman_id 
FROM
	(
	SELECT
		salesman_id,
		(
		SELECT
			r.money 
		FROM
			( SELECT order_id, sum( money ) money FROM b_order_receivables WHERE NAME != '保障金' AND state = 2 GROUP BY order_id ) r 
		WHERE
			r.order_id = o.id 
		)* o.commission / 100 AS "money" 
	FROM
		b_order o 
	WHERE
		deleted = 0 
		AND salesman_id IS NOT NULL 
		AND "money" IS NOT NULL 
	) s 
GROUP BY
	s.salesman_id

嗯完美.
在这里插入图片描述
这里这个问题我总结了一下,归根结底出现就是因为我自己代码平时为了省事,导致代码不规范;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值