3

私は Oracle データベースでの実行に慣れているため、この問題のトラブルシューティング方法がよくわかりません。クエリの簡単な例を次のように絞り込みました。

 SELECT 0 as gm_rowID, 
'-ALL Grantmakers-' as grantmakerName 
FROM dual
GROUP BY 2

phpMyAdmin は、次のエラーで SQL を実行します。

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY 2 LIMIT 0, 30' at line 1

Oracle はこのクエリを問題なく実行できます。MySQL は、GROUP BY句なしでクエリを実行できます。何か案は?

--クエリ全体は次のとおりです。

SELECT 
    p.grantmaker_rowid as gm_rowID, 
    gm.grantmaker_companyName as grantmakerName 
FROM grantmaker_info gm, proposal_submission p 
WHERE 0=0 
AND p.grantmaker_rowid = gm.grantmaker_rowid 
UNION 
SELECT 
    0 as gm_rowID, 
    '-ALL Grantmakers-' as grantmakerName
FROM dual 
ORDER BY 2
GROUP BY 2
LIMIT 0 , 30
4

1 に答える 1

2

出力用に選択された列は、列名、列のエイリアス、または列の位置を使用して、ORDER BY および GROUP BY 句で参照できます。列の位置は整数で、1 から始まります

出典: http://dev.mysql.com/doc/refman/5.0/en/select.html

そのテーブルに列が 1 つしかない場合を除き、正常に動作するはずです。ただし、私の提案は、あなたがしようとしているものの列名(またはエイリアス)を参照することですGROUP BY.

編集:私の他の唯一の提案は、SHOW CREATE TABLEそのテーブルの出力を含めることです。

edit2:わかりました、質問を更新しました。の代わりにORDER BY 2、あなたORDER BY grantmakerName(それが順序付けたい列である場合) ではないのはなぜですか?

于 2012-11-26T07:49:51.827 に答える