タイトルに記載されているエラーが表示されます:
Unknown column 'FeedbackType' in 'where clause'
しかし、私はその理由を理解していません。これは私のクエリです:
SELECT SQL_CALC_FOUND_ROWS `Appointments`.ID, FeedbackType, FeedbackSubType
FROM `UserFeedback`
INNER JOIN `Appointments` ON `Appointments`.ID = `UserFeedback`.Appointments_ID
INNER JOIN `Reasons` ON `UserFeedback`.FeedbackSubType = `Reasons`.ID
WHERE `FeedbackType` = 1 ORDER BY `Appointments`.ID ASC
LIMIT 0, 10
FeedbackType
はUserFeedback
表の列です。大文字と小文字は正しく、すでに数回チェックされています。
完全を期すために、これはテーブル スキーマです。
CREATE TABLE IF NOT EXISTS `UserFeedback`
(
ID bigint(20) NOT NULL AUTO_INCREMENT,
FeedbackType int(4) NOT NULL,
FeedbackSubType int(4) NOT NULL,
Notes varchar(170) NULL,
Appointments_ID bigint(20) NOT NULL,
IpTracking_ID bigint(20) NOT NULL,
PRIMARY KEY (ID),
FOREIGN KEY (Appointments_ID) REFERENCES Appointments(Id),
FOREIGN KEY (IpTracking_ID) REFERENCES IpTracking(Id)
)
ENGINE=MyISAM DEFAULT CHARSET=utf8;
問題は何ですか?
[編集]
これらのバリアントも機能しません (FeedbackType
予約語/文字が含まれておらず、テーブルにのみ属しているためUserFeedback
)。
... WHERE UserFeedback.FeedbackType = 1
... WHERE `UserFeedback`.`FeedbackType` = 1
... WHERE FeedbackType = '1'
etc.
(そして、実際にそうすべき理由がわかりません)
[編集2]
実際に列が含まれていることを確認するために実行SELECT * FROM UserFeedback
したところ、いくつかの行があり、すべてに列が含まれていました (INSERT
エラーなしで動作しました)。
言及されたバリアントのそれぞれについて、私は常にWHERE
節で同じエラーを受け取ります。句を省略するWHERE
と、フィルタリングされていない結果 (FeedbackType
それらの結果の列を含む) が得られるため、非常に混乱します。
[解決]
@MarinSagovacが2番目のスニペットで提案したように、何らかの理由で、WHERE
クエリを内部の条件に置き換えると修正されました。INNER JOIN
SELECT SQL_CALC_FOUND_ROWS `Appointments`.ID, FeedbackType, FeedbackSubType
FROM `Appointments`
INNER JOIN `UserFeedback` ON `Appointments`.ID = `UserFeedback`.Appointments_ID
AND `UserFeedback`.FeedbackType = 1
INNER JOIN `Reasons` ON `UserFeedback`.FeedbackSubType = `Reasons`.ID
ORDER BY `Appointments`.ID ASC
LIMIT 0, 10
現在は句がないことに注意してくださいWHERE
。ただし、セマンティクスは同じはずですよね? そして、列が実際に存在することは明らかであるため、エラーメッセージは少し誤解を招くものです。