Question

Je suis en train de joindre des données ensemble de 2 tables, mais sur plusieurs colonnes. voici un exemple:

  

Source Tableau

     

ID | desc | AAAA | BBBB |

     

Tableau2 Tableau

     

ID | texte | ID1 | ID2 | ID3 |

où ID1, ID2 et ID3 Table2 sont les ID de la Source Tableau

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)

Je suppose que ce serait une jointure, mais je ne peux pas obtenir le droit de syntaxe ... ou que je serais mieux avec une Union?

Était-ce utile?

La solution

Si toutes les tables de source sont renseignés 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 t.ID=@YourIDHere

Autres conseils

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

Vous devez joindre à la table source à trois reprises, un pour chaque ID. Vous pouvez également essayer un unuion pour voir ce qui fonctionne 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.

Trois joint 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top