2014-09-08 5 views
3

Bonjour développeurs J'ai deux tables, combinant via MySQL JOIN, obtenir plusieurs lignes au lieu de rangée, s'il vous plaît résoudre ce problème,mysql jointure interne retours lignes dupliquées

tbltestdefault 
----------------------------------------------- 
ID Test_ID   Description 
----------------------------------------------- 
1 117     Blood Group 
2 117     Rh Factor 
3  4     HB 
4  4      RBC 
5  4      ESR 

tblreportdetail 
----------------------------------------------- 
ID Test_Default_ID   Result_Value 
----------------------------------------------- 
1  117        A 
2  117        Positive 
3  4        12 
4  4        15 
5  4        25 

ma requête est

SELECT a.Description, 
b.Result_Value 
from tbltestdefault a 
inner join tblreportdetail b on a.Test_ID = b.Test_Default_ID 

cette requête retourne plusieurs lignes résultat

de requête ci-dessus

tblreportdetail 
Description Result_Value 
HB   12 
HB   15  
HB   25 
HB   12 
RBC   15 
RBC   25 
RBC   12 
RBC   15 
ESR   
ESR 
ESR 
ESR 
Blood Group 
Blood Group 
Blood Group 
Blood Group 
Rh Factor 
Rh Factor 
Rh Factor 
Rh Factor 
+0

Avez-vous posé une question? Ou étiez-vous juste de donner un rapport de situation? – spencer7593

+0

la question est pourquoi je reçois des lignes en double? –

Répondre

2

Ils ne sont pas dupes. Vous obtenez exactement ce que vous avez demandé. Si vous ajoutez les deux ID de table à votre requête, vous verrez qu'ils ne sont pas dupes, par ex.

Description Result_Value a.id b.id 
HB    12    3  3 
HB    15    3  4 
HB    25    3  5 
HB    12    4  3 
HB    15    4  4 
HB    25    4  5 
etc... 
+0

non, je ai juste Test_ID et Test_Default_ID pas d'ID unique –

1

Q: La question est pourquoi je reçois des lignes en double?

A: Les lignes dont le contenu est identique sont produites dans le Returne de jeu de résultats de la requête, en raison de la spécifiée prédicat de jointure, et parce qu'il y a plusieurs lignes dans chaque table qui ont les mêmes valeurs Test_ID/Test_Default_ID.

Le résultat attendu de la requête, compte tenu des données affichées, serait un total de 13 lignes. C'est 2 * 2 + 3 * 3.

Chacune des deux lignes Test_ID = 117 correspond à deux lignes Test_Default_ID = 117, pour un total de 4 lignes renvoyées.

Chacune des trois lignes Test_ID = 4 correspond à trois lignes Test_Default_ID, pour un total de 9 lignes renvoyées. Comme la requête n'inclut aucun identificateur unique des lignes dans le jeu de résultats, le contenu de certaines des lignes renvoyées est identique.

C'est pourquoi vous observez des "lignes en double" renvoyées par la requête.

+0

merci cher pour votre réponse descriptive –

+0

pouvez-vous m'aider comment je peux ajouter un identifiant unique entre ces deux tables? –