2010-07-12 9 views
0

Désolé, il s'agit d'une question noob. Je suis nouveau avec MySQL:Quel est le problème avec cette requête MySQL?

J'ai écrit une requête comme ceci:

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) 

Cette requête renvoie une erreur de syntaxe:

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 

J'ai passé 30 minutes à regarder, mais je peux Ne comprenez pas ce qui ne va pas.

Merci beaucoup pour votre aide

+1

Comme vous utilisez MySQL, vous pouvez changer 'v.endtime - v.begintime' en' TIMEDIFF (v.endtime, v.begintime) AS duration', car cela vous donnera un décalage horaire correctement formaté. – Mike

Répondre

2
ON (g.company_id = u.company_id) 

devrait être après INNER JOIN user_info u

Il devient

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

Je pense que si 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

J'ai essayé, mais: Code d'erreur: 1054 Unknown column 'vbegintime' dans 'liste des champs' Temps d'exécution: 00: 00: 00: 000 Temps de transfert: 00: 00: 00: 000 Temps total: 00: 00: 00: 000 En fait, je n'ai pas écrit cette requête. Visual Studio génère automatiquement une requête basée sur la requête que j'ai écrite – Vimvq1987

+0

La réponse de Chris Diver est probablement plus proche du résultat souhaité. –

1

Vous mettez les déclarations ON sur la mauvaise place. La solution standard est d'ajouter directement après la jointure:

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) 

Ou vous pouvez utiliser des crochets pour obtenir le ON correct lié à la bonne 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

la deuxième requête fonctionne (je vérifie si cela fonctionne bien, le premier échoue :) – Vimvq1987

+0

@ Vimvq1987: La première requête échoue probablement parce qu'il y a un extra ')' à la fin du dernier 'INNER JOIN'. Notez également que la table 'company_users' est référencée dans la clause' FROM', mais pas utilisée ailleurs dans votre requête. – Mike

+1

Ouais désolé, copier et coller sans y penser. J'ai enlevé le support supplémentaire, cela devrait fonctionner maintenant. – Matijs

1

Votre champ n'est pas vbegintime mais v.begintime

+0

Je viens de le voir :). Mais après avoir corrigé cela, le problème se termine toujours – Vimvq1987

+0

Le commentaire de Mike peut résoudre votre problème – Toto

Questions connexes