SQL Sélectionner plusieurs lignes dans une affiche de ligne
Ma situation est que j'ai deux tables. Je veux se joindre à eux et d'avoir des doublons apparaissent sur la même ligne. Se moquer de structures de la table donnée ci-dessous
MainTbl
Cols: MKey1,MKey2,MData1,MData2,MData3
SuppTbl
Cols: SPrimaryKey,SKey1,SKey2,SData1,SData2
Je veux LEFT JOIN MainTbl à SuppTbl. Cependant, SuppTbl contient des doublons de SKey1 et SKey2 touche combo.
Les résultats que je veux sont ci-dessous, Où "-#" indique la duplication nombre.
MKey1,MKey2,MData1,MData2,MData3,SData1-1,SData2-1,SData1-2,SData2-2
En substance, tous les champs de la jointure doit contenir sur une ligne en fonction d'un Key1 et Touche2.
TENTÉ DE RÉPONDRE PAR SEAN W
SELECT
MainTbl.MKey1,
MainTbl.MKey2,
tcd.SData1 AS SData11,
tcd.SData2 AS SData22,
tcr.SData1 AS SData12,
tcr.SData2 AS SData22
FROM MainTbl
LEFT JOIN SuppTbl tcd
ON MainTbl.MKey1=tcd.SKey1 AND MainTbl.MKey2=tcd.SKey2
LEFT JOIN SuppTbl tcr
ON MainTbl.MKey1=tcr.SKey1 AND MainTbl.MKey2=tcr.SKey2
WHERE tcd.SData1 < tcr.SData1
RÉSULTAT Sans Succès. Ne tirez pas sur tous les enregistrements.
- Ne Table2 avoir un maximum de deux matchs?
- Pas nécessairement. Il pourrait avoir un ou deux. Si il a en plus, c'est un cas rare, mais possible. J'ai des conditions qui pourraient limiter à deux. "OÙ DataD1 = 4" et "OÙ DataD1=22"
- Ce parfum de SQL utilisez-vous?
- Transact SQL
- au mieux, vous vous retrouverez avec des lignes avec certaines colonnes ne pas peuplé, où il y a seulement 1 rejoindre. cette amende? Puis il suffit de faire 2 gauche rejoint à la deuxième table et de retourner les résultats.
- Cela ne marchera pas. Il va créer des doublons de données de la colonne si aucune ligne existent dans de Table2.
- Vous avez des colonnes et des et des exemples de données ne correspondent pas, et votre condition where (en commentaire) sera de retour à zéro des enregistrements pour les données de l'échantillon. Qui, combinée avec+ de 500 caractères sans saut de ligne est très difficile à lire et à présenter un obstacle pour les personnes qui veulent vous aider.
- J'ai ajusté mon post pour être plus convivial. S'il vous plaît laissez-moi savoir si cela vous aide à comprendre ce que je cherche.
- la dernière ligne de sql dans ma réponse ci-dessous devraient aborder les doublons. Sinon, vous devez expliquer ce que la logique serait utilisé pour éviter une double situation.
- c'est un excellent outil pour la création des modèles des problèmes que vous essayez de résoudre dans sql - sqlfiddle
Vous devez vous connecter pour publier un commentaire.
Révisée (commentaires après):
Maintenant cela ne fonctionne pas à 100% pour les cas où vous avez 2 lignes dans SuppTbl: elle donnera deux lignes de résultat - on va être beaux et de l'autre vous souhaitez exclure. Pour l'exclure, vous devez fournir quelques informations sur la façon d'identifier les cas où il aura >1 SuppTbl ligne. Vous avez mentionné ci-dessus dans les commentaires "OÙ Data1 = 4". De sorte qu'il serait nécessaire de faire partie d'une clause where. Il serait quelque chose comme:
Cela peut alors EXCLURE le seul SuppTbl ligne. Si vous avez besoin de fournir des informations sur la façon de ne PAS avoir de ligne de les filtrer. Peut-être:
(Cela ne fonctionnera pas avec les données dans les tableaux, ci-dessus).
Trouvé une réponse. J'ai réduit un peu pour des raisons de simplicité, mais il fonctionne très bien, aussi longtemps que il ya des cas OÙ les conditions qui peuvent être appliquées, comme il y en a dans mon cas.
22
soudainement surgi à partir ?!