2010-07-12 5 views
0

Извините, потому что это вопрос noob. Я новичок в 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

ответ

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

Я думаю, что это должно б

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

+0

Ответ Криса Дайвера, вероятно, ближе к желаемому результату. –

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

+0

@ Vimvq1987: первый запрос, вероятно, не работает, потому что в конце последнего 'INNER JOIN' появляется первый запрос') '. Также обратите внимание, что таблица 'company_users' указана в предложении' FROM', но не используется в другом месте вашего запроса. – Mike

+1

Да, извините, скопируйте и вставьте, не задумываясь. Я удалил дополнительный кронштейн, теперь он должен работать. – Matijs

1

Ваше поле не vbegintime но v.begintime

+0

Просто увидел это :). Но после исправления этого вопроса все еще выходит – Vimvq1987

+0

Комментарий Майка может решить вашу проблему – Toto

Смежные вопросы