2010-09-10 7 views
0

J'essaie d'utiliser la requête suivante, et si elle n'a qu'une seule instruction having cela fonctionne comme prévu. Si j'ajoute la deuxième instruction having cela ne fonctionne pas.Requête MySQL - plusieurs instructions ne fonctionnent pas

SELECT candidate.first_name, 
candidate.last_name, 
qualification.code, 
property.value AS funding_band_value, 
qualification.funding_band, 
property.value AS qualification_level_value, 
qualification.qualification_level_id 
FROM candidate_qualification, candidate, qualification, property 
WHERE candidate_qualification.candidate_id=candidate.id and 
candidate_qualification.qualification_id=qualification.id 
HAVING funding_band_value = (select property.value from property where qualification.funding_band=property.id) and 
HAVING qualification_level_value = (select property.value from property where qualification.qualification_level_id=property.id) 

Quelqu'un pourrait-il expliquer pourquoi cela ne fonctionne pas et comment je devrais faire cela.

Répondre

0

Vous n'avez pas besoin d'avoir ici, utilisez simplement AND et cela fait partie de votre clause WHERE.

Les sous-requêtes ne sont pas nécessaires, ces tables sont déjà jointes.

Quelque chose comme cela devrait être plus proche de ce que vous voulez:

SELECT c.first_name, 
    c.last_name, 
    q.code, 
    p.value AS funding_band_value, 
    q.funding_band, 
    p.value AS qualification_level_value, 
    q.qualification_level_id 
FROM candidate_qualification cq 
INNER JOIN candidate c ON cq.candidate_id=c.id 
INNER JOIN qualification q ON cq.qualification_id=q.id 
INNER JOIN property p ON q.funding_band=p.id 
    and q.qualification_level_id=p.id 
+0

J'ai d'abord essayé cela, cependant puisque funding_band_value et qualification_level_value sont des alias, ils ne peuvent pas être utilisés dans la clause WHERE ......? – user444501

+0

Vous n'utilisez pas l'alias, vous utilisez le nom de la colonne d'origine, comme je l'ai fait (déplacé à la clause ON). – RedFilter

+0

Mon mauvais, trouvé le 'ON' cluase manquant, ont mis à jour la requête. – RedFilter

1

des actes ayant la même manière que WHERE ou GROUP BY. Vous le référencez une fois pour commencer à l'utiliser et combiner plusieurs instructions avec des opérateurs AND ou OR. Un examen approfondi de l'analyseur de requête pourrait vous donner une réponse plus explicite.

Questions connexes