1

タイトルに記載されているエラーが表示されます:

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

FeedbackTypeUserFeedback表の列です。大文字と小文字は正しく、すでに数回チェックされています。

完全を期すために、これはテーブル スキーマです。

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。ただし、セマンティクスは同じはずですよね? そして、列が実際に存在することは明らかであるため、エラーメッセージは少し誤解を招くものです。

4

5 に答える 5

2

where句でUserFeedback.FeedbackTypeを試しましたか?

于 2012-10-13T22:11:08.310 に答える
1

バックティックを追加してみてください:

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

追加の試行:

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  
INNER JOIN `UserFeedback`.`FeedbackType` = 1  ORDER BY `Appointments`.ID ASC
LIMIT 0, 10
于 2012-10-13T22:14:21.290 に答える
0

myisamを使用しているときの外部キー?

それはおそらく問題です

于 2012-10-17T22:18:47.993 に答える
0
SELECT SQL_CALC_FOUND_ROWS `Appointments`.ID, UserFeedback.FeedbackType, `UserFeedback.FeedbackSubType 
FROM `UserFeedback'
INNER JOIN `Appointments` ON `Appointments`.ID = `UserFeedback`.Appointments_ID 
INNER JOIN `Reasons` ON `UserFeedback`.FeedbackSubType = `Reasons`.ID  
WHERE UserFeedback.FeedbackType = 1  ORDER BY `Appointments`.ID ASC
LIMIT 0, 10

今試してみて

于 2012-10-13T22:16:02.587 に答える
-2

WHERE句でこれを試してください:

WHERE UserFeedback.FeedbackType = '1'

フィールド名のすべての引用符 (') を削除します

于 2012-10-13T22:37:33.920 に答える