2016-09-14 34 views
2

爲什麼下面的語句返回一個1146錯誤SQL表「HistoryDB.HistoryDB」不存在?我正試圖在ID相同的數據庫中加入兩個表。我很抱歉,如果列/表名稱令人困惑,它們出於安全目的已經被損壞。爲什麼我的SQL查詢給1146錯誤尋找Database.Database?

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

你弄明白了嗎? – kbball

回答

3

此:

select Reporttbl.id, TableInfo_tbl.lastTime 
     ^^^^^^^ 
    INNER JOIN Reporttbl AS TableInfo_tbl etc... 
         ^^^^^^^^^^^^^^^^ 

一旦別名表,可以不再使用「原始」的表名,僅別名。

+0

我認爲這個查詢中的下一個問題將是'inner join' – Shaharyar

0

您正在使用的別名Reporttbl作爲TableInfo_tbl

爲什麼你使用的是原來的表名,並在關於加入條款的別名?

可能是你的意思是HistoryDB

INNER JOIN Reporttbl AS TableInfo_tbl on Reporttbl.statID = HistoryDB.statID 

,或者如果HistoryDB是數據庫的名稱,你應該從條款如調用適當的表中您: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 
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在連接你可以只保留原始表名。

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