【问题标题】:MYSQL query with UNION works in local Xampp but not in the production使用 UNION 的 MYSQL 查询在本地 Xampp 中有效,但在生产环境中无效
【发布时间】:2021-11-08 01:49:36
【问题描述】:

我在本地 xampp 环境中有 MariaDB 10.4.17。在我的生产环境中,我有 MySQL 5.7.28。由于查询不起作用,我尝试使用 MariaDB 10.3.31 的另一台服务器,认为它在生产版本中不起作用,因为服务器类型是“MySQL”

我转储了整个数据库并将其导入两台服务器,并在所有三台服务器上运行完全相同的查询。此外,我将相同的转储文件导入到本地主机,使另一个数据库认为在导出数据库时可能会出现问题。但该查询在该本地数据库上也能完美运行。

我现在对此一无所知。一些帮助将不胜感激。

下面是我正在尝试的查询。

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 = 'PUBLIC' OR server_type = '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'

我在 MYSQL 服务器中遇到的错误是这样的

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用 靠近'UNION ( 选择 A.parent_id ' 在第 42 行

我在 Maria DB 中遇到的错误是

#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解要使用的正确语法 靠近'UNION ( 选择 A.parent_id ...' 在第 42 行

【问题讨论】:

  • “查询无效”是什么意思?如果您有错误,请在此处发布。如果数据有误,请在此处发布测试数据minimal reproducible example
  • @SlavaRozhnev,您好,抱歉,我忘了添加错误。现在我更新了这个问题。谢谢
  • 开发和生产中最好使用同品牌同版本的数据库软件,避免出现这样的兼容性意外。 MySQL 和 MariaDB 大约在 2010 年有一个共同的起源,但从那时起它们都发生了重大变化,不应再被认为是兼容的。

标签: php mysql sql database mariadb


【解决方案1】:

我想通了。这只是我使用的附加括号的问题。 我删除了 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 = 'PUBLIC' OR server_type = '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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 2012-04-21
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2020-06-22
    • 1970-01-01
    相关资源
    最近更新 更多