2010-07-12 4 views
0

죄송합니다. 이것은 멍청한 질문입니다.이 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) 

이 쿼리 구문 오류 반환 :

나는이 같은 쿼리 작성 : 나는 MySQL의 새로운이야 내가 30 분을 찾고 보냈어요

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 

을,하지만 난 할 수 무엇이 잘못되었는지 파악하지 마십시오. 당신은 나는 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

MySQL을 사용함에 따라'v.endtime -v.begintime'을'TIMEDIFF (v.endtime, v.begintime) AS duration'으로 변경하면 올바른 형식의 시간차가 생길 수 있습니다. – Mike

답변

2
ON (g.company_id = u.company_id) 

이어야 ㄱ한다고 생각

0

도움을 위해

는 정말 고마워요 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

나는이 시도했지만 : 오류 코드 : 실행 시간 '필드 목록'에서 1054 알 수없는 열 'vbegintime': 00 : 00 : 00 : 000 전송 시간 : 00 : 00 : 00 : 000 총 시간 : 00 : 00 : 00 : 000 사실이 쿼리는 작성하지 않았습니다. Visual Studio는 내가 작성한 쿼리를 기반으로 자동으로 쿼리를 생성했습니다. – Vimvq1987

+0

Chris Diver의 대답이 아마도 원하는 결과에 더 가깝습니다. –

1

됩니다 후

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

두 번째 쿼리가 작동합니다. 첫 번째 쿼리가 제대로 작동하는지 확인하고 있습니다. – Vimvq1987

+0

@ Vimvq1987 : 마지막 'INNER JOIN'끝에 여분의')이 있기 때문에 첫 번째 쿼리가 실패 할 수 있습니다. 'company_users' 테이블은'FROM' 절에서 참조되지만 쿼리의 다른 곳에서는 사용되지 않습니다. – Mike

+1

죄송합니다. 생각없이 복사하여 붙여 넣으십시오. 여분의 브래킷을 제거 했으므로 이제 작동합니다. – Matijs

1

귀하의 필드가 vbegintime하지만 v.begintime

아닌 표준 솔루션은 가입 후 바로 추가하는 것입니다
+0

그냥 봤어요 :). 그러나 그 문제를 해결 한 후에도 여전히 문제가 종료됩니다. – Vimvq1987

+0

Mike의 의견이 귀하의 문제를 해결할 수 있습니다. – Toto

관련 문제