(sql语句错误解决方法)处理百万订单遇到的问题:Every derived table must have its own alias

本文介绍了在MySQL中使用派生表时遇到的错误`Every derived table must have its own alias`,并提供了解决方案。通过一个实际的订单数据验证案例,解释了在查询中派生表必须带有别名的规则,展示了正确使用派生表进行数据校验的SQL语句。
摘要由CSDN通过智能技术生成

  这个问题涉及到MySQL中的派生表,涉及到派生表就必须给这个派生表一个别名。如果没有别名就会出现如标题所示的错误。如果读者理解select查询模型的话,对这个问题应该就会好理解一点。

  下面用一个实际案例来说明:

  原始需求是补订单,那么补完订单你怎么验证补进去的单是没问题的呢?其中一个就是查看是否有脏数据。我的做法就是先把补进去的单的订单号都查出来,然后通过order by 分组,通过having与count函数来找出是否有重复数据(重复数据就是脏数据)。很多人第一次写,思路都是正确的,就像下面这样,运行后结果是Every derived table must have its own alias。

SELECT
	COUNT(channel_tid),
	channel_tid
FROM
	(
		SELECT
			channel_tid
		FROM
			trade
		WHERE
			channel_tid IN (
				'127947772',
				'127845735',
				'127413932',
				'122137178',
				'128038001',
				'127923270',
				'122915384',
				'127173769',
				'122925270',
				'118909384',
				'122029905',
				'127678951',
			)
	) 
GROUP BY
	channel_tid
HAVING
	COUNT(channel_tid) > 1

  出现上述情况的原因是因为在MySQL中使用派生表(也可以理解为from型子查询,将查询的结果当成from的对象)必须要有个别名。用AS加一个别名就可以正常运行了

SELECT
	COUNT(channel_tid),
	channel_tid
FROM
	(
		SELECT
			channel_tid
		FROM
			trade
		WHERE
			channel_tid IN (
				'127947772',
				'127845735',
				'127413932',
				'122137178',
				'128038001',
				'127923270',
				'122915384',
				'127173769',
				'122925270',
				'118909384',
				'122029905',
				'127678951',

			)
	) AS a
GROUP BY
	channel_tid
HAVING
	COUNT(channel_tid) > 1

  结论:派生表必须要有别名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jayden 

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值