2012-02-08 10 views
0

頑固なMySQLクエリに問題があります。それは非常に長くて複雑なクエリです。残念です。私は本当にそれを見つけるために最善を尽くしましたが、私はここで手を使うことができました。MySQL:unionクエリはMySQL 5.5で失敗し、MySQL 5.1で動作します

次のクエリは、information_schemaの列情報とnexedit_schemaというテーブルの列情報の完全な外部結合をエミュレートするために使用されます。 PHP変数$ dbには、後者のテーブルを含むターゲットデータベースが含まれています。

クエリは実際に自分のサーバー(MySQLバージョン5.1)で正常に実行されますが、友人のサーバー(MySQLバージョン5.5)では実行できません。それは私が近くに構文エラーがあることを主張「(schema_tables.db_table ONを...」

を私はおそらく本当に愚かな何かを望むよ。誰でも親切にも私を助けるために?

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; 
+0

Re: "それは申し訳ありませんが、それについて申し訳ありません":それを修正しないでください:手動で '$ db'の値で置き換えてみましたか? MySQLのコマンドラインでクエリを実行していますか? 'UNION'の1つのブランチを切り取り、ブランチはエラーをトリガしますか? – ruakh

+0

私は後者の提案を試していない、私はいくつかの結果を持って戻ってきます。 – DriesOeyen

+0

@ruakh私は、phpMyAdminでunion'dクエリを別々に実行しようとしました。どちらも期待通りに動作するため、問題は何とかUNIONコマンドそのものと思われます。興味深いことに、2番目のクエリは、この特定のケースでは結果を返さない(とは思わない)ことに注意してください(他の場合には必要ですが)。 – DriesOeyen

答えて

2

不要)がありますここでは:AS schema_tables)前にする必要がありますAS

+0

これは、 'JOIN((SELECT ...)AS ...)ON(...)'の構造体です。 – ruakh

+0

クエリのデバッグ中に余分なカッコが追加され、ほとんどのインストールでうまくいきましたので、完了したらそこに残してしまったと思っていました。理論的に言えば、それは問題ではないが、おそらくそれがわからないという違いを生むだろう。 – DriesOeyen

+0

実際には、決してこれは問題ではない。 (SELECT ...)... ON(...) 'です。ありがとうございます。多く! – DriesOeyen

関連する問題