2013-09-23 153 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