为什么以下语句返回1146错误,SQL表“HistoryDB.HistoryDB”不存在?我试图在他们的id匹配的同一数据库中连接两个表。我很抱歉,如果列/表名称令人困惑,那么为了安全起见,它们会被破坏。
select Reporttbl.id, TableInfo_tbl.lastTime
from HistoryDB
INNER JOIN Reporttbl AS TableInfo_tbl on Reporttbl.statID = TableInfo_tbl.statID
WHERE lastReportTime BETWEEN '2016-09-13 00:00:00' and '2016-09-13 23:00:00'
Group BY id, UNIX_TIMESTAMP(lastReportTime) DIV 3600 ORDER BY id ASC
答案 0 :(得分:3)
此:
select Reporttbl.id, TableInfo_tbl.lastTime
^^^^^^^
INNER JOIN Reporttbl AS TableInfo_tbl etc...
^^^^^^^^^^^^^^^^
一旦您对表格进行别名,就不能再使用"原创"表名,只有别名。
答案 1 :(得分:0)
您正在使用Reporttbl的别名作为TableInfo_tbl
那你为什么要使用原始的tablename和on子句中的别名来加入?
可能是您的意思是HistoryDB
INNER JOIN Reporttbl AS TableInfo_tbl on Reporttbl.statID = HistoryDB.statID
或者如果HistoryDB是数据库的名称,则应该在from子句中调用正确的表,例如:Your_table_name
select Reporttbl.id, TableInfo_tbl.lastTime
from Your_table_name
INNER JOIN Reporttbl AS TableInfo_tbl on Your_table_name.statID = TableInfo_tbl.statID
WHERE lastReportTime BETWEEN '2016-09-13 00:00:00' and '2016-09-13 23:00:00'
Group BY id, UNIX_TIMESTAMP(lastReportTime) DIV 3600 ORDER BY id ASC
答案 2 :(得分:0)
您错误地在FROM
子句中指定了数据库名称,而这应该是您的第一个表名。
SELECT Reporttbl.id, TableInfo_tbl.lastTime
FROM TableInfo_tbl
INNER JOIN Reporttbl on Reporttbl.statID = TableInfo_tbl.statID
WHERE lastReportTime BETWEEN '2016-09-13 00:00:00' and '2016-09-13 23:00:00'
Group BY id, UNIX_TIMESTAMP(lastReportTime) DIV 3600 ORDER BY id ASC
您也不需要在联接中使用别名Reporttbl
,因为您可以保留原始表名。
答案 3 :(得分:0)
您需要在ON语句中包含HistoryDB,并且在使用别名时也要保持一致,或者只是删除它。尝试这样的查询:
SELECT Reporttbl.id, Reporttb1.lastTime
FROM HistoryDB
INNER JOIN Reporttbl
ON HistoryDB.statID = Reporttbl.statID
WHERE lastReportTime
BETWEEN '2016-09-13 00:00:00' and '2016-09-13 23:00:00'
Group BY id, UNIX_TIMESTAMP(lastReportTime) DIV 3600
ORDER BY id ASC