You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含UNION的MySQL查询本地Xampp正常但生产环境报错如何解决

问题原因
  • 语法兼容性问题:MySQL 5.7、MariaDB 10.3及更早版本的SQL解析器不支持IN子句中用额外括号包裹UNION的多个子查询块的写法。你当前查询中created_by IN后面紧跟的((SELECT ... UNION SELECT ...) UNION (SELECT ...))嵌套括号写法,只有MariaDB 10.4及以上版本做了解析兼容,低版本会直接报1064语法错误。
  • 冗余逻辑问题:你在WHERE语句末尾已经全局限定了server_type = 'PUBLIC',前面OR分支中写的server_type = 'PRIVATE'条件不会生效,属于无效逻辑。
修复方案

移除IN子句中包裹UNION块的多余嵌套括号即可兼容所有版本,修改后的查询语句如下:

SELECT
    COUNT(*) AS AGGREGATE
FROM
    `ps_servers`
WHERE
    (
        (`created_by` = 4)
        OR (
            created_by IN(
                SELECT id FROM users WHERE parent_id = 4
                UNION
                SELECT U.id FROM users U LEFT JOIN users T ON U.parent_id = T.id
            )
            AND server_type IN ('PUBLIC', 'PRIVATE')
        )
        OR (
            created_by IN(
                SELECT parent_id FROM users WHERE id = 4
                UNION
                SELECT T.parent_id FROM users U LEFT JOIN users T ON U.parent_id = T.id WHERE U.id = 4
                UNION
                SELECT A.parent_id FROM users U LEFT JOIN users T ON U.parent_id = T.id LEFT JOIN users A ON T.parent_id = A.id WHERE U.id = 4
            )
            AND server_type = 'PUBLIC'
        )
    )
    AND `server_type` = 'PUBLIC'
    AND `status` <> 'DELETED'

如果你的业务确实需要包含server_type = 'PRIVATE'的记录,删掉末尾全局的AND server_type = 'PUBLIC'条件即可。

内容的提问来源于stack exchange,提问作者Yasitha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:54:01