为什么我的SQL查询会给出错误1146查找Database.Database?

时间:2016-09-14 20:43:52

标签: mysql sql

为什么以下语句返回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

4 个答案:

答案 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