0

私はMySQLデータベースでいくつかの作業を行っていますが、エラーを受け取ることに完全に困惑しています

1054 - Unknown column 'Puzzles.PuzzleID' in 'on clause'

テーブル名と列名の両方が存在し、正しい。Navicat のビジュアル デザイナーで作成しました。

SELECT
`PuzzleCategories`.`PuzzleCategory`,
`Clients`.`BusinessName`,
`Puzzles`.`PuzzleNumber`
FROM
`Puzzles`
Inner Join `PuzzleCategories` ON `Puzzles`.`PuzzleCategoryID` = `PuzzleCategories`.`PuzzleCategoryID` ,
`Clients`
Inner Join `Publications` ON `Clients`.`ClientID` = `Publications`.`ClientID`
Inner Join `PublicationIssues` ON `PublicationIssues`.`PublicationID` =     `Publications`.`PublicationID`
Inner Join `PuzzleUsages` ON `PuzzleUsages`.`PuzzleID` = `Puzzles`.`PuzzleID` AND `PuzzleUsages`.`PublicationIssueID` = `PublicationIssues`.`PublicationIssueID`
4

2 に答える 2

2

Puzzles列がないと思いますPuzzleIDID列はそのテーブルで単に呼び出されていますか? それともPuzzle_ID

SHOW CREATE TABLE Puzzlesそのテーブルの現在の定義を確認するには、実行する必要があります。

引用符の欠落が原因である場合があります。

... ON `Puzzles.PuzzleID` ...

Puzzles.PuzzleID上記は、文字どおり「 ,」という名前の列、つまり、中央にドットがある 16 文字の長さの列名を探します。


@Bell は、カンマ スタイルの結合と SQL-92 スタイルの結合が混在していることに気付いたことで賞に値します。気付かなかった!

結合操作の優先順位が混乱を引き起こしている可能性があるため、同じクエリで両方を使用しないでください。

JOINキーワードの優先順位が高くなります。テーブル式を確認できるようにクエリを単純化すると、次のように評価されます。

SELECT . . . 
FROM (Puzzles JOIN PuzzleCategories),
(Clients JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages)

問題は、結合を列PuzzleUsagesと比較する必要があることですが、優先順位の問題により比較できません。Puzzles.PuzzleID列は、最後の のオペランドの一部ではありませんJOIN

括弧を使用してエラーを解決し、テーブル式の優先順位を明示的にオーバーライドできます (算術式で括弧を使用するのと同じように)。

SELECT . . . 
FROM Puzzles JOIN (PuzzleCategories, Clients)
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages

JOINまたは、SQL-92構文を一貫して使用することもできます。これはより明確であるという@Bellに同意します。

SELECT . . . 
FROM Puzzles JOIN PuzzleCategories JOIN Clients
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages
于 2009-11-18T05:34:57.260 に答える
1

列名が正しいと確信している場合、問題は結合の順序にある​​可能性があります。コンマの両側の結合が別々に構築されているようです。(これが可能性が高いかどうかはわかりませんが、あなたが提供した情報に基づいた唯一の推測です)

クエリは次のように再構築できます。


SELECT
`PuzzleCategories`.`PuzzleCategory`,
`Clients`.`BusinessName`,
`Puzzles`.`PuzzleNumber`
FROM
`Clients`
INNER JOIN `Publications` ON `Clients`.`ClientID` = `Publications`.`ClientID`
INNER JOIN `PublicationIssues` ON `PublicationIssues`.`PublicationID` =   `Publications`.`PublicationID`
INNER JOIN `PuzzleUsages` ON`PuzzleUsages`.`PublicationIssueID` = `PublicationIssues`.`PublicationIssueID`
INNER JOIN `Puzzles` ON `Puzzles`.`PuzzleID` = `PuzzleUsages`.`PuzzleID`
INNER JOIN `PuzzleCategories` ON `Puzzles`.`PuzzleCategoryID` = `PuzzleCategories`.`PuzzleCategoryID`

とにかく読みやすくなります。

于 2009-11-18T05:56:51.020 に答える