我得到的標題描述的錯誤:未知列where`條款
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
列),所以它真的很混亂。
[解決方法]
出於某種原因,裏面INNER JOIN
條件更換WHERE
查詢固定它,@MarinSagovac suggested in his second snippet:
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
子句現在,但語義應該是一樣的吧?很明顯,該列確實存在,所以錯誤信息有點誤導恕我直言。
@SOaddict:*在 'where子句' 未知列 'UserFeedback.FeedbackType' *(在 'WHERE子句' 或*未知列 'FeedbackType' *如果我省略表名)。 – Lou
你確定這個列存在嗎?沒有列創建表,然後在稍後將它添加到SQL。如果是這樣,那麼「如果不存在」語句將阻止它被添加。運行這個'SELECT * FROM UserFeedback'並告訴我們你在結果中看到了哪些列。 – JConstantine
@JLevett:是的,試過了,它存在。我運行了'SELECT * FROM UserFeedback',它返回了所有6列。我甚至手動將該輸出中的列複製/粘貼到我的查詢中,以確保我沒有(完全)瘋狂。 – Lou