Что не так с этим запросом MySQL? - PullRequest
0 голосов
/ 12 июля 2010

Извините, потому что это нубский вопрос. Я новичок в 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 минут на поиски, но не могу понять, что случилось.

Большое спасибо за вашу помощь

Ответы [ 4 ]

2 голосов
/ 12 июля 2010
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) 
1 голос
/ 12 июля 2010

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

1 голос
/ 12 июля 2010

Вы поставили операторы 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 голосов
/ 12 июля 2010

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

 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...