2010-07-12 195 views
0

对不起,因为这是一个菜鸟问题。我是新与MySQL:这个MySQL查询有什么问题?

我写这样的查询:

SELECT 
    u.userid, u.alias, g.company_name, 
v.endtime - v.begintime AS duration, 
    u.status, u.service_starttime, 
u.service_expiretime, v.begintime, u.email 
FROM 
    company_users c, company_groups g INNER JOIN 
    user_info u INNER JOIN vfon_log v 
    ON (u.userid = v.hostid) ON (g.company_id = u.company_id) 

该查询返回一个语法错误:

Query : SELECT  u.userid, u.alias, g.company_name, v.endtime - v.begintime AS duration, u.status, u.service_starttime, u.service_ex... 
Error Code : 1064 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON (g.company_id = u.company_id) 
LIMIT 0, 1000' at line 4 
Execution Time : 00:00:00:000 
Transfer Time : 00:00:00:000 
Total Time  : 00:00:00:000 

我花了30分钟找,但我可以弄清楚什么是错的。

非常感谢你对你的帮助

+1

由于您正在使用MySQL,您可能需要将'v.endtime - v.begintime'更改为'TIMEDIFF(v.endtime,v.begintime)AS duration',因为这会给您一个正确格式化的时差。 – Mike 2010-07-12 08:46:40

回答

2
ON (g.company_id = u.company_id) 

后应INNER JOIN user_info u

,使其成为

SELECT 
    u.userid, u.alias, g.company_name, 
v.endtime - v.begintime AS duration, 
    u.status, u.service_starttime, 
u.service_expiretime, v.begintime, u.email 
FROM 
    company_users c, company_groups g 
INNER JOIN user_info u ON (g.company_id = u.company_id) 
INNER JOIN vfon_log v ON (u.userid = v.hostid) 
0

我觉得应该b

SELECT  u.userid, u.alias, g.company_name, v.endtime - vbegintime AS duration, 
u.status, u.service_starttime, u.service_expiretime, v.begintime, u.email 
    FROM company_users c, company_groups g 
          INNER JOIN 
          (user_info u INNER JOIN vfon_log v ON (u.userid = v.hostid)) 
           ON g.company_id = u.company_id 
+0

我想这一点,但: 错误代码:在 '字段列表' 执行时间1054 未知列 'vbegintime':00:00:00:000 转换时间:00:00:00:000 总时间: 00:00:00:000 事实上,我没有写这个查询。 Visual Studio根据我写的查询自动生成查询 – Vimvq1987 2010-07-12 08:25:38

+0

Chris Diver的答案可能更接近期望的结果。 – 2010-07-12 08:26:28

1

你把ON声明放在错误的地方。标准的解决办法是将它添加后直接加入:

SELECT * 
    FROM company_users c, 
     company_groups g INNER JOIN 
      user_info u ON (g.company_id = u.company_id) 
     INNER JOIN vfon_log v 
       ON (u.userid = v.hostid) 

或者你可以用括号来得到正确的ON链接到正确的INNER JOIN

SELECT * 
    FROM company_users c, 
     company_groups g INNER JOIN 
      (user_info u INNER JOIN vfon_log v 
       ON (u.userid = v.hostid)) 
      ON (g.company_id = u.company_id) 
+0

第二个查询有效(我正在检查它是否正常工作,第一个查询失败:) – Vimvq1987 2010-07-12 08:31:35

+0

@ Vimvq1987:第一个查询可能失败,因为最后一个INNER JOIN末尾有一个额外的''''。还要注意,在'FROM'子句中引用了表'company_users',但是在查询的其他地方没有使用。 – Mike 2010-07-12 08:35:55

+1

对不起,复制和粘贴没有想到。我删除了额外的支架,它现在应该工作。 – Matijs 2010-07-12 08:42:55

1

你的领域是不是vbegintimev.begintime

+0

只看到它:)。但纠正后,问题仍然存在 – Vimvq1987 2010-07-12 08:36:33

+0

迈克的评论可能会解决您的问题 – Toto 2010-07-12 08:58:34