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";

我试图用这个查询做的事情是:我有一个名为 Dept 的表,其中包含所有部门名称和 id、具有用户名、部门 id 和 id 的用户信息。我还有一个名为 checkinout 的第三张表,它有用户 ID,有时间。

所以我想(使用部门的名称)从属于该部门的人那里带来 Checkinout 表中的所有数据,但是当我尝试该查询时它给了我一个错误:

syntax error in from clause. sql state 37000 in sqlexecdirect

我无法解决它。我正在使用访问数据库。

非常感谢您的帮助。

4

5 回答 5

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 ...)。

于 2013-09-23T20:18:49.437 回答
0

我认为应该是:

SELECT * FROM (Dept 
INNER JOIN Userinfo ON (Dept.Deptid = Userinfo.Deptid)) 
INNER JOIN Checkinout ON (Userinfo.Name = Checkinout.name)
WHERE Dept.DeptName = '$departamento'
于 2013-09-23T19:55:49.463 回答
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'
于 2013-09-23T19:55:56.797 回答
0

大概应该是:

SELECT * FROM Dept 
INNER JOIN Userinfo ON Dept.Deptid = Userinfo.Deptid 
INNER JOIN Checkinout on Userinfo.Name = Checkinout.name 
where Dept.DeptName = '$departamento' 
于 2013-09-23T19:55:57.633 回答
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。两者都可以在一段时间内查看第一个结果的每个寄存器并检查另一个查询


搜索仍然有问题,它不能正常工作,我试图做一个完整的查询,它同时在 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

比你的帮助

于 2013-10-08T21:09:44.333 回答