2009-05-18 10 views
3

Je suis en train de se joindre à des données ainsi que de 2 tables, mais sur plusieurs colonnes. voici un exemple:requête SQL pour joindre plusieurs colonnes

Source Table

ID | Desc | AAAA | BBBB |

Tableau2 Table

ID | Texte | ID1 | ID2 | ID3 |

où ID1, ID2 et ID3 dans Tableau2 sont les ID de la Source Table

Je voudrais faire une requête qui donne les résultats:

Table2.Text, 
Source.Desc(ID1), 
Source.AAAA(ID1), 
Source.Desc(ID2), 
Source.AAAA(ID2), 
Source.Desc(ID3), 
Source.AAAA(ID3) 

I » d devinez que ce serait une jointure, mais je ne peux pas obtenir la syntaxe correcte ... ou serais-je mieux avec une Union?

Répondre

1

Si toutes les tables de source sont peuplées dans le Tableau 2, cela vous donnera encore des résultats partiels:

SELECT 
    t.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA 
    FROM Table2    t 
     LEFT OUTER JOIN Source s1 ON t.ID1 = s1.ID 
     LEFT OUTER JOIN Source s2 ON t.ID2 = s2.ID 
     LEFT OUTER JOIN Source s3 ON t.ID3 = s2.ID 
    WHERE [email protected] 
+0

Tel est le cas réel dans mon scénario – geocoin

+0

je dilemme de réponse maintenant :) – geocoin

1

Trois jointures devrait faire l'affaire:

select A.*, coalesce(B1.Text,B2.Text,B3.Text,'') as Text 
from Source A 
inner join Table2 B1 on B1.ID1=A.ID 
inner join Table2 B2 on B2.ID2=A.ID 
inner join Table2 B3 on B3.ID3=A.ID 
6

Vous pouvez simplement utiliser plusieurs jointures, ne pouvait pas vous? Par exemple:

SELECT tb.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA 
FROM Table2 tb 
    INNER JOIN Source s1 ON tb.ID1 = s1.ID 
    INNER JOIN Source s2 ON tb.ID2 = s2.ID 
    INNER JOIN Source s3 ON tb.ID3 = s2.ID 
+0

Ce exactement fait l'affaire :) – geocoin

+0

supplémentaire: pour obtenir les résultats exacts que je avais besoin, j'ai utilisé jointures externes gauche, mais c'est juste ma situation spécifique. – geocoin

+0

désolé pour arracher la réponse choisie, KM était de plus correct pour ma situation ... – geocoin

4

Vous devez joindre à la table source trois fois, un pour chaque ID. Vous pouvez également essayer un ustensile pour voir lequel fonctionne le mieux.

Ceci est une mauvaise conception de la table (il devrait être normalisé) et je vous suggère de le changer maintenant si possible. Il shoudl bea table associée à chaque identifiant dans un dossier distinct, vous pouvez rejoindre une fois et il serait beaucoup plus efficace et beaucoup plus facile d'écrire du code contre et vous ne seriez pas à changer la structure de la table et tous La requêtes le jour où vous avez besoin ID4.

+0

Je considérerai cela mais pas une option * en ce moment * – geocoin

Questions connexes