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'
经过排查后,去掉or查询条件就可以了
SELECT
a.fdate as date
FROM
une_ebill a
WHERE
( a.fid = '2222333333' AND a.fdate = '2022-04-07' )
LIMIT 10
所以我就想到一个办法,去掉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 将查出来的结果,当做一张表进行查询,这样就可以了。
我以为,这个是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
这就很神奇了,经过排查发现,出错的sql是在tdsql数据库底下执行的,并且对应的表是存在按照月份来分区分片的。这估计就涉及到分区分片的机制了,咱也搞不懂,下次注意就行了。
博主新推出的gitee免费开源项目(商城+APP+小程序+H5),有兴趣的小伙伴可以了解一下。