2013-09-23 154 views
0
$consulta3 = "SELECT * FROM Dept INNER JOIN Userinfo INNER JOIN Checkinout 
        on Dept.DeptName = '$departamento' 
        where Dept.Deptid = Userinfo.Deptid AND Userinfo.Name = Checkinout.name"; 

的東西我嘗試這個查詢做的是:我有一個表稱爲部門那裏有所有的部門工作人員名稱和ID,擁有用戶用戶信息名稱,部門ID和ID。另外我有一個叫做checkinout的第三張表,它有一段時間的用戶ID。Access查詢錯誤(「語法錯誤在FROM子句」)

所以我想(用百貨商店的名字)從屬於該教研室帶給人們從Checkinout表中的所有數據,但是當我嘗試查詢它給了我一個錯誤:

syntax error in from clause. sql state 37000 in sqlexecdirect 

我無法解決它。我使用Acces數據庫。

非常感謝您的幫助。

+1

你缺少的子句中第一次加入? – 2013-09-23 19:52:32

回答

2

訪問絕對需要的任何查詢,其中包括不止一個加入的FROM條款在括號中。如果您有可用的Access,請在查詢設計器中創建並測試新的查詢。設計者有用的原因之一是它知道保持數據庫引擎高興的括號的規則。

以類似於此的查詢開始。現在不要擔心基於Dept.DeptName的過濾。只要確保連接設置正確。

SELECT * 
FROM 
    (Dept 
    INNER JOIN Userinfo 
    ON Dept.Deptid = Userinfo.Deptid) 
    INNER JOIN Checkinout 
    ON Userinfo.Name = Checkinout.name 

你的聯接設置正確後,加入過濾器中的約束(WHERE Dept.DeptName ...)。

+0

它不工作對我來說:「SELECT * FROM \t \t \t \t \t \t(系INNER JOIN USERINFO \t \t \t \t \t \t ON Dept.Deptid = Userinfo.Deptid) \t \t \t \t \t \t INNER JOIN Checkinout \t \t \t \t \t \t ON Userinfo.Name = Checkinout.name \t \t \t \t \t \t其中Dept.Name = '$阿雅'「 – user2690047

+0

是否不工作時'Access應用程序會話中測試WHERE'條款? – HansUp

0

我覺得應該是:

SELECT * FROM (Dept 
INNER JOIN Userinfo ON (Dept.Deptid = Userinfo.Deptid)) 
INNER JOIN Checkinout ON (Userinfo.Name = Checkinout.name) 
WHERE Dept.DeptName = '$departamento' 
0

您已經扭轉內部聯接和WHERE子句。 你應該寫這樣的SQL:

SELECT * 
    FROM Dept 
INNER JOIN Userinfo ON Dept.Deptid = Userinfo.Deptid 
INNER JOIN Checkinout ON Userinfo.Name = Checkinout.name" 
WHERE Dept.DeptName = '$departamento' 
0

大概應該是:

SELECT * FROM Dept 
INNER JOIN Userinfo ON Dept.Deptid = Userinfo.Deptid 
INNER JOIN Checkinout on Userinfo.Name = Checkinout.name 
where Dept.DeptName = '$departamento' 
0

正是我打算做的是使用2個不同的查詢:

$consulta= "SELECT * FROM Dept INNER JOIN Userinfo 
     ON Userinfo.Deptid = Dept.Deptid 
     where Dept.DeptName = '$departamento'"; 

$consulta2 = "SELECT * FROM Checkinout, Userinfo 
    where Checkinout.Userid = '$userid' AND Userinfo.userid = '$userid' AND 
    Checkinout.Checktime BETWEEN CDate('$fecha1') AND CDate('$fecha2')"; 

第一個選擇所有屬於一個教研室的人,第二個到找到一個人的所有IN和OUT。無論是在一段時間才能夠看的第一個結果的每個寄存器,並與其他查詢檢查


仍然有與搜索的問題,它不是做工精細,即時試圖在那裏searchs做一個完整的查詢在同一時間3個表,但它給我一個錯誤:

$toda_consulta= "SELECT * 
        FROM Dept 
        INNER JOIN Userinfo ON (Dept.Deptid = Userinfo.Deptid) 
        INNER JOIN Checkinout ON (Checkinout.Userid = Userinfo.Userid) 
        WHERE Dept.DeptName = '$departamento' AND 
          Checkinout.Checktime BETWEEN CDate('$fecha_inicio') AND CDate('$fecha_fin')"; 

錯誤:Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][Controlador ODBC Microsoft Access] sintax error (missing operator) in the expression '(Dept.Deptid = Userinfo.Deptid) INNER JOIN Checkinout ON (Checkinout.Userid = Userinfo.Userid)'., SQL state 37000 in SQLExecDirect in C:\wamp\www\casa 7-9-13\calcula_departamento1.php on line 51

比你的幫助

+0

如果這是最終解決您的問題的方法,那麼您應該[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)這個答案。 (可以接受你自己的回答。) –

+0

完成,謝謝,我是社區新手 – user2690047

+1

在'FROM'子句中需要額外的括號,因爲它包含多個連接。以我的答案爲例。 – HansUp