2009-01-27 6 views
0

Bonjour,Pourquoi cette requête renvoie-t-elle des résultats indésirables?

J'ai un problème avec cette requête:

SELECT 
    P.txt_nome AS Pergunta, 
    IP.nome AS Resposta, 
    COUNT(*) AS Qtd 
FROM 
    tb_resposta_formulario RF 
    INNER JOIN formularios F ON 
     F.id_formulario = RF.id_formulario 
    INNER JOIN tb_pergunta P ON 
     P.id_pergunta = RF.id_pergunta 
    INNER JOIN tb_resposta_formulario_combo RFC ON 
     RFC.id_resposta_formulario = RF.id_resposta_formulario 
    INNER JOIN itens_perguntas IP ON 
     IP.id_item_pergunta = RFC.id_item_pergunta 
WHERE 
    RF.id_formulario = 2 
GROUP BY  
    P.txt_nome, 
    IP.nome 

Ceci est le résultat réel de cette requête:

| Pergunta | Resposta | Qtd |
| Produits | Combo 1MB | 3 |
| Produits | Combo 2MB | 5 |
| Produits | Combo 4MB | 1 |
| Produits | Combo 6MB | 1 |
| Produits | Combo 8MB | 4 |
| Região | MG | 3 |
| Região | PR | 2 |
| Região | RJ | 3 |
| Região | SC | 1 |
| Região | SP | 5 |

Ce sont les résultats que j'attendais:

| Produto | Região | Qtd |
| Combo 1Mo | MG | 3 |
| Combo 2Mo | SP | 5 |
| Combo 4Mo | SC | 1 |
| Combo 6Mo | RJ | 1 |
| Combo 8MB | PR | 2 | J'utilise les opérateurs PIVOT et UNPIVOT mais le résultat n'est pas satisfaisant.

Quelqu'un at-il déjà fait face à cette situation avant? Avez-vous un aperçu que vous pouvez offrir?

Je l'ai déjà analysé ces liens:

Att, Pelegrini

Répondre

2

La réponse "évidente" est: parce que la requête est incorrecte. Nous ne savons vraiment rien de la structure de la table et de ce que vous essayez d'accomplir.

En ce qui concerne au moins un problème très basique dans votre requête: vous attendez les colonnes |Produto | Região |Qtd| dans votre réponse, mais la requête sélectionne sans ambiguïté les colonnes Pergunta, Reposta et Qtd, qui coïncide avec le résultat que vous obtenez.

À quel point connaissez-vous SQL? Cela peut valoir la peine de lire un texte d'introduction. Je suggère this comme une bonne introduction. (Utilise Oracle, mais les principes sont les mêmes)

1

Je vous recommande également de jeter un oeil à Jeff Atwood's explication de JOINS.

Questions connexes