Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:联合查询在MySQL 5.5上失败,在MySQL 5.1上工作_Mysql_Join_Syntax_Union - Fatal编程技术网

MySQL:联合查询在MySQL 5.5上失败,在MySQL 5.1上工作

MySQL:联合查询在MySQL 5.5上失败,在MySQL 5.1上工作,mysql,join,syntax,union,Mysql,Join,Syntax,Union,我遇到了一个顽固的MySQL查询问题。这是一个很长很复杂的查询,很抱歉。我真的尽了我最大的努力去找到它,但我可以在这里帮忙 以下查询用于模拟information_架构中的列信息和名为nexedit_架构的表中的列信息的完整外部联接。PHP变量$db包含包含后一个表的目标数据库 查询实际上在我自己的服务器(MySQL版本5.1)上成功运行,但在朋友的服务器(MySQL版本5.5)上失败。它声称我在“ON(schema\u tables.db\u table…”附近有一个语法错误 我可能忽略了一些

我遇到了一个顽固的MySQL查询问题。这是一个很长很复杂的查询,很抱歉。我真的尽了我最大的努力去找到它,但我可以在这里帮忙

以下查询用于模拟information_架构中的列信息和名为nexedit_架构的表中的列信息的完整外部联接。PHP变量$db包含包含后一个表的目标数据库

查询实际上在我自己的服务器(MySQL版本5.1)上成功运行,但在朋友的服务器(MySQL版本5.5)上失败。它声称我在“ON(schema\u tables.db\u table…”附近有一个语法错误

我可能忽略了一些非常愚蠢的事情。有人愿意帮助我吗

SELECT information_schema.tables.table_name, schema_tables.db_table, schema_tables.ne_page
  FROM information_schema.tables
  LEFT JOIN (
    (SELECT DISTINCT db_table, ne_page FROM {$db}.nexedit_schema)
    AS schema_tables)
  ON (schema_tables.db_table = information_schema.tables.table_name
    COLLATE utf8_unicode_ci)
  WHERE information_schema.tables.table_schema = '{$db}'
    AND information_schema.tables.table_name NOT LIKE 'nexedit_%'

UNION

SELECT information_schema.tables.table_name, schema_tables.db_table, schema_tables.ne_page
  FROM information_schema.tables
  RIGHT JOIN (
    (SELECT DISTINCT db_table, ne_page FROM {$db}.nexedit_schema)
    AS schema_tables)
  ON (schema_tables.db_table = information_schema.tables.table_name
    COLLATE utf8_unicode_ci)
  WHERE information_schema.tables.table_schema IS NULL
    AND schema_tables.db_table NOT LIKE 'nexedit_%'

GROUP BY information_schema.tables.table_name,schema_tables.db_table;

这里有不必要的
这里:
作为模式表)
应该在
之前作为
这里有不必要的
这里:
作为模式表)
应该在
之前作为模式表。
Re:“这是一个很长很复杂的查询,很抱歉”:不要为此道歉——修复它。您是否尝试过手动替换
$db
的值并在MySQL命令行上运行查询?您是否尝试过删除
联合的一个分支
并查看另一个分支是否触发了错误?我没有尝试后一个建议,我会在得到一些结果后报告。@ruakh我只是尝试通过phpMyAdmin分别运行两个联合查询。它们的行为都和预期的一样,所以问题似乎出在联合司令部本身。值得注意的是,第二个查询在这种特定情况下不会(也不应该)返回任何结果(尽管在其他情况下是必要的),这会以任何方式影响联合吗?您是否尝试过以其他方式简化?如果在第二个查询中删除group by,会发生什么情况?如果删除其中一个联接(并且只对依赖于联接的任何字段使用一些固定值,例如
NULL
),会发生什么情况?如果删除
COLLATE utf8\u unicode\u ci
,会发生什么情况?如果删除一些不必要的括号,会发生什么情况?(但回答你的问题——如果MySQL抱怨语法错误,那么它还没有发现第二个查询是否返回任何行,所以不,这不是问题。)Re:“这是一个非常长且复杂的查询,对此表示抱歉”当前位置不要为此道歉,修复它。您是否尝试过手动替换
$db
的值并在MySQL命令行上运行查询?您是否尝试过删除
联合的一个分支
并查看另一个分支是否触发了错误?我没有尝试后一个建议,我会在得到一些结果后报告。@ruakh我只是尝试通过phpMyAdmin分别运行两个联合查询。它们的行为都和预期的一样,所以问题似乎出在联合司令部本身。值得注意的是,第二个查询在这种特定情况下不会(也不应该)返回任何结果(尽管在其他情况下是必要的),这会以任何方式影响联合吗?您是否尝试过以其他方式简化?如果在第二个查询中删除group by,会发生什么情况?如果删除其中一个联接(并且只对依赖于联接的任何字段使用一些固定值,例如
NULL
),会发生什么情况?如果删除
COLLATE utf8\u unicode\u ci
,会发生什么情况?如果删除一些不必要的括号,会发生什么情况?(但回答你的问题——如果MySQL抱怨语法错误,那么它还没有发现第二个查询是否返回任何行,所以不,这不是问题。)好的,您不能只删除
而不删除与其配对的
)。此处的结构是(…)上的
连接((选择…)作为…)
:括号比需要的多得多,但它们都非常平衡。我在调试查询时添加了额外的括号,因为它在大多数安装中都有效,所以我想在完成后将它们留在那里。正如@ruakh提到的,它们是平衡的。如果我删除一些额外的括号,会使查询更稳定吗?Th从理论上讲,这不重要,但也许它确实起到了我不知道的作用。事实上,没关系。这毕竟解决了它。在启用之前删除其中一个“(“在选择不同项之前”和“)”。所以这就是
(选择…)AS…ON(…)
。非常感谢您!您不能只删除
而不删除与其配对的
)。此处的结构是(…)上的
JOIN((选择…)AS…)
:括号比需要的多得多,但它们都非常平衡。我在调试查询时添加了额外的括号,因为它在大多数安装中都有效,所以我想在完成后将它们留在那里。正如@ruakh提到的,它们是平衡的。如果我删除一些额外的括号,会使查询更稳定吗?Th从理论上讲,这不重要,但可能确实会产生我不知道的影响。事实上,没关系。这毕竟解决了它。在启用之前删除其中一个“(“在选择不同项之前”和“)”。因此这就是
(选择…)AS…ON(…)
。非常感谢!