2010-09-23 7 views
3

J'ai deux tables: A (col1, col2, col3, col4)joindre deux tables avec un nombre différent de lignes (dans le serveur SQL)

B (col1, col2, col3, col4)

tableau A a 4 enregistrements (lignes) et B a 6 rows.I veulent les rejoindre comme celui-ci, par exemple les rejoindre dans C Table

C (B.col1, B.col2, A.col3, A.col4, B.col3, B.col4) (tableaux ont des valeurs différentes dans les dossiers que col1 et col2 contient les mêmes valeurs)

quand je les rejoins sur A.col1 = B.col1 et A.col2 = B.col2 Je prends produit cartésien :(

PS Je veux avoir 6 lignes dans C, où B.col1, B.col2, B.col3, B.col4 ont 6rows et A.col3, A.col4 ont 4 lignes et autres 2 nul

aidez-moi s'il vous plaît ..

+2

ce que d oVous signifie pour rejoindre? Quelles sont les clés étrangères, le cas échéant? La question n'est pas claire. – vulkanino

+1

La jointure que vous suggérez - A.col1 = B.col1 et A.col2 = B.col2 - devrait fonctionner. Postez le code SQL complet que vous essayez. –

+1

Voulez-vous a) toutes les lignes de B et toutes les lignes de A où les clés correspondent ou b) toutes les lignes de A et B qui ont un ensemble unique de valeurs clés? – Murph

Répondre

2

Vous devez utiliser un FULL OUTER JOIN

Select a.Col1, 
     a.Col2, 
     a.Col3, 
     a.Col4, 
     b.Col3, 
     b.Col4 

From TableA a 
Full Outer Join TableB b on a.Col1 = b.Col1 
         And a.Col2 = b.Col2 

EDIT:

"ne fonctionne pas" ne va pas aider tout le monde. Peut-être pourriez-vous fournir plus de détails sur les raisons pour lesquelles cela ne fonctionne pas pour vous.

Vous pouvez ajouter des exemples de données et le résultat attendu réel à votre question.

par exemple

Create Table #TableA 
(
Col1 
... 
) 

Insert Into #TableA 
Values (...) 

alors plus clairement votre question, la meilleure des réponses seront. Si les gens ne comprennent pas exactement quel est votre problème exact et quel est le résultat escompté, alors comment pouvons-nous vous fournir une réponse complète et correcte?

+1

Une raison pour laquelle cela ne fonctionne pas serait bien.) Que voulez-vous que cette requête ne fasse pas? –

+0

Désolé, désolé.J'étais si pressé (parce que le problème devait être résolu rapidement) que j'ai raté quelque chose d'important, c'est pourquoi tu n'étais pas capable de m'aider, c'était de ma faute. Pour cette question, ce que j'ai effectivement demandé, votre réponse fonctionne ... Merci .. Mais le problème était différent et j'ai résolu mon problème :) – kupa

+0

On n'arrête jamais d'apprendre ... "FULL" est un nouveau sur moi (et même si je ne suis même pas proche d'être un gourou SQL je ne suis pas mauvais ...) – Murph

1

Essayez

SELECT A.col1, A.col2, A.col3, A.col4, B.col3, B.col4 
FROM A 
FULL OUTER JOIN B on (A.col1 = B.col1 AND A.col2 = B.col2) 
+1

La nécessité d'un «OUTER JOIN» a été ajoutée par une modification de la question peu de temps après ma réponse. –

+0

Merci à vous tous. – kupa

+0

J'ai enlevé le downvote (-: – Murph

1

Vous pouvez utiliser y joindre externe gauche .. Mais j'ai une autre question sur la façon de remplir les lignes vides avec d'autres valeurs que NULL ..

Questions connexes