2011-01-26 2 views
0

Je suis novice en SQL et ne comprends pas pourquoi ce morceau de code ne s'exécutera pas. Je connais des erreurs mais je n'obtiens aucun résultat. Peu importe combien de temps j'attends, le code continue à traiter. Je sais que ce problème a probablement quelque chose à voir avec ma base de données spécifique, mais je me demandais s'il y avait des erreurs manifestes.Requête SQL qui ne s'exécutera pas

De plus, s'il s'agit de l'appel que je fais dans ma base de données, comment pourrais-je procéder pour le déboguer puisque je n'ai pas d'erreurs formelles?

SELECT cr.COMMUNICATIONS_ID AS ANSWER_ID, cr.CONSUMER_ID as VIEWER_ID, 
     cr.ACTION_LOG_ID, nc.PARENT_COMMUNICATIONS_ID AS QUESTION_ID, 
     cirm.CONSUMER_RATING AS VIEWER_INTEREST, 
     cim.CONSUMER_INTEREST_EXPERT_ID AS DOMAIN 
FROM (
     SELECT 234 AS CONSUMER_ID, ACTION_LOG_ID, COMMUNICATIONS_ID 
     FROM consumer_action_log 
     WHERE COMM_TYPE_ID=4 
    ) AS cr 
    JOIN network_communications AS nc ON 
     cr.COMMUNICATIONS_ID=nc.COMMUNICATIONS_ID 
    JOIN communication_interest_mapping AS cim ON 
     nc.PARENT_COMMUNICATIONS_ID=cim.COMMUNICATION_ID 
    JOIN consumer_interest_rating_mapping AS cirm ON 
     cr.CONSUMER_ID=cirm.CONSUMER_ID AND   
     cim.CONSUMER_INTEREST_EXPERT_ID=cirm.CONSUMER_INTEREST_ID; 
+0

Quel paquet de base de données utilisez-vous? –

+0

Toad, DBVisualizer et PHPMyAdmin – Spencer

+0

Avez-vous essayé d'utiliser EXPLAIN ou l'équivalent Toad? – Spechal

Répondre

2

La colonne dérivée dans la sous-requête peut être désactivée MySQL. Essayez plutôt cette requête pour les mêmes résultats

SELECT cr.COMMUNICATIONS_ID AS ANSWER_ID, cirm.CONSUMER_ID as VIEWER_ID, 
     cr.ACTION_LOG_ID, nc.PARENT_COMMUNICATIONS_ID AS QUESTION_ID, 
     cirm.CONSUMER_RATING AS VIEWER_INTEREST, 
     cim.CONSUMER_INTEREST_EXPERT_ID AS DOMAIN 
FROM (
     SELECT ACTION_LOG_ID, COMMUNICATIONS_ID 
     FROM consumer_action_log 
     WHERE COMM_TYPE_ID=4 
    ) AS cr 
    JOIN network_communications AS nc ON 
     cr.COMMUNICATIONS_ID=nc.COMMUNICATIONS_ID 
    JOIN communication_interest_mapping AS cim ON 
     nc.PARENT_COMMUNICATIONS_ID=cim.COMMUNICATION_ID 
    JOIN consumer_interest_rating_mapping AS cirm ON 
     cim.CONSUMER_INTEREST_EXPERT_ID=cirm.CONSUMER_INTEREST_ID 
WHERE cirm.CONSUMER_ID = 234 
+0

QUE C'ETAIT! Merci beaucoup! – Spencer

2

Je ne vois aucune erreur évidente (de syntaxe). Vous avez probablement fait une erreur de logique dans vos jointures. Pour déboguer, éliminez les jointures jusqu'à ce que vous obteniez des résultats. Ensuite, commencez à ajouter les jointures. Cela devrait vous montrer où vous vous êtes trompé.

+0

En fait, j'ai déjà fait cela (cela fait partie de la plus grande jointure). Les deux premières jointures isolées ne me posent pas de problème, ce n'est que lorsqu'elles sont associées à la troisième jointure. – Spencer

+0

Vous pourriez essayer d'ajouter une clause LIMIT et voir si elle renvoie les résultats – Gerrat