sql语句where条件中出现or,对应的select参数就无法使用别名。最近在开发过程碰到一个问题,在sql方面碰到一个问题,虽然不知道啥原因,但是做个笔记,下次避免入坑。

sql语句是这样的

SELECT
	a.fdate as date
FROM
	une_ebill a 
WHERE
	( a.fid = '2222333333' AND a.fdate = '2022-04-07' ) OR ( a.fid = '4445555' AND a.fdate = '2022-05-31' )
	LIMIT 10

很神奇的是,报错了:[Err] 1060 - Duplicate column name 'fdate'

mysql语句条件 where语句后的条件加count_mysql

 经过排查后,去掉or查询条件就可以了

SELECT
	a.fdate as date
FROM
	une_ebill a 
WHERE
	( a.fid = '2222333333' AND a.fdate = '2022-04-07' )
	LIMIT 10

mysql语句条件 where语句后的条件加count_mysql_02

 所以我就想到一个办法,去掉or使用union all方式进行改造

SELECT
	*
FROM
	(
		SELECT
			a.fdate AS date
		FROM
			une_ebill a
		WHERE
			(
				a.fid = '2222333333'
				AND a.fdate = '2022-04-07'
			)
		UNION ALL
		SELECT
			a.fdate AS date
		FROM
			une_ebill a
		WHERE
			(
				a.fid = '4445555'
				AND a.fdate = '2022-05-31'
			)
	) b
LIMIT 10

使用union all 将查出来的结果,当做一张表进行查询,这样就可以了。 

mysql语句条件 where语句后的条件加count_H5_03

 我以为,这个是sql的问题,以后注意就是了。后面我本想在自己构建的表重现一下问题,发现自己构建的表居然是没有错的。

SELECT
	a.username as mingzi
FROM
	kxmall_admin a
WHERE
 STATUS = 1 and
	(
		a.username = 'admin'
		AND a.id = 1
	)
OR (
	a.username = 'guest'
	AND a.id = 32
)
	LIMIT 10

mysql语句条件 where语句后的条件加count_mysql_04

 这就很神奇了,经过排查发现,出错的sql是在tdsql数据库底下执行的,并且对应的表是存在按照月份来分区分片的。这估计就涉及到分区分片的机制了,咱也搞不懂,下次注意就行了。


 博主新推出的gitee免费开源项目(商城+APP+小程序+H5),有兴趣的小伙伴可以了解一下。

生鲜商城kxmall-小程序 + App + 公众号H5: kxmall-生鲜商城+APP+小程序+H5。同时支持微信小程序、H5、安卓App、苹果App。支持集群部署,单机部署。可用于B2C商城,O2O外卖,社区超市,生鲜【带配套骑手端配送系统】。kxmall使用uniapp编码。使用Java开发,SpringBoot 2.1.x框架,MyBatis-plus持久层框架、Redis作为缓存、MySql作为数据库。前端vuejs作为开发语言。