2

以前の MySQL バージョンで動作していた SQL をいくつか持っていますが、新しい MySQL 5 バージョンにアップグレードした後、エラーが発生します。SQLは次のとおりです。

SELECT portfolio.*, projects.*, types.*
FROM projects, types
LEFT JOIN portfolio
ON portfolio.pfProjectID = projects.projectID
WHERE projects.projectType = types.typeID AND types.typeID = #URL.a#
ORDER BY types.typeSort, projects.projectPriority ASC

そして、私が受け取っている新しいエラー:

Unknown column 'projects.projectID' in 'on clause'

これを新しい MySQL バージョンの互換性のある SQL に変換するにはどうすればよいですか?

どうもありがとう!

4

3 に答える 3

3

portfolioクエリを記述した方法では、コンパイラは、あなたが に結合したままにしたいと考えているため、句がテーブルを参照してtypesいると不平を言います。onprojects

この ANSI スタイルのバージョンを試してください。

SELECT * 
FROM projects p
inner join types t on p.projectType = t.typeID AND t.typeID = #URL.a#
LEFT JOIN portfolio pf ON pf.pfProjectID = p.projectID 
ORDER BY t.typeSort, p.projectPriority
于 2010-04-19T15:48:57.603 に答える
2

コンマ演算子の代わりにINNERJOINを使用してクエリを書き直す必要があります。

SELECT portfolio.*, projects.*, types.*
FROM projects
INNER JOIN types
ON projects.projectType = types.typeID
LEFT JOIN portfolio
ON portfolio.pfProjectID = projects.projectID
WHERE types.typeID = #URL.a#
ORDER BY types.typeSort, projects.projectPriority ASC

説明:

これは、ANSI規格に準拠するためにMySQLが演算子の優先順位を変更することと関係があります。MySQLのドキュメントを確認してください:http://dev.mysql.com/doc/refman/5.1/en/join.html

INNER JOINと、(コンマ)は、結合条件がない場合は意味的に同等です。どちらも、指定されたテーブル間でデカルト積を生成します(つまり、最初のテーブルのすべての行が2番目のテーブルのすべての行に結合されます)。

ただし、コンマ演算子の優先順位は、INNER JOIN、CROSS JOIN、LEFTJOINなどよりも低くなります。結合条件があるときに他の結合タイプとコンマ結合を混在させると、「on句」の「不明な列」の形式のエラーが発生する可能性があります。この問題への対処に関する情報は、このセクションの後半に記載されています。

MySQLページにも詳細な説明があります。「以前は、コンマ演算子(、)」を検索してください。

于 2010-04-19T16:01:21.290 に答える
0

projectID列が実際に存在し、タイプミスがない場合は、これを次のように変更してみてください。


SELECT portfolio.*, projects.*, types.*
FROM projects
INNER JOIN types ON projects.projectType = types.typeID 
LEFT JOIN portfolio
ON portfolio.pfProjectID = projects.projectID
WHERE  types.typeID = #URL.a#
ORDER BY types.typeSort, projects.projectPriority ASC
于 2010-04-19T15:50:19.280 に答える