web-dev-qa-db-fra.com

Comment joindre deux tables par plusieurs colonnes en SQL?

J'ai deux tables Evalulation et Value

Dans les deux tableaux, il y a quatre colonnes. Mais trois des quatre sont les mêmes. En d'autres termes, ils ont tous les deux CaseNum, FileNum, ActivityNum. En plus de ces colonnes, Evaluation a la colonne Grade et Value a la colonne Score.

Je veux fusionner les deux en une seule table par CaseNum, FileNum, ActivityNum j'ai donc une nouvelle table de 5 colonnes avec à la fois Value et Score dedans.

Puis-je utiliser Inner Join plusieurs fois pour ce faire?

10
JasonSmith

La réponse est oui: vous pouvez utiliser la jointure interne vous pouvez créer une jointure sur les colonnes communes

select E.CaseNum, E.FileNum, E.ActivityNum,E.Grade,V.score from Evalulation E
inner join Value V
ON E.CaseNum=V.CaseNum and
E.FileNum=V.FileNum and 
E.ActivityNum=V.ActivityNum

Créer une table

Create table MyNewTab(CaseNum int, FileNum int, 
ActivityNum int,Grade int,score varchar(100))

Insérer des valeurs

Insert into MyNewTab Values(CaseNum, FileNum, ActivityNum,Grade,score)
select E.CaseNum, E.FileNum, E.ActivityNum,E.Grade,V.score from Evalulation E
inner join Value V
ON E.CaseNum=V.CaseNum and
E.FileNum=V.FileNum and 
E.ActivityNum=V.ActivityNum
24
Ganesh_Devlekar

Non, il suffit d'inclure les différents champs dans la clause "ON" de 1 instruction de jointure interne:

SELECT * from Evalulation e JOIN Value v ON e.CaseNum = v.CaseNum
    AND e.FileNum = v.FileNum AND e.ActivityNum = v.ActivityNum
4
Barett

Vous ne devez effectuer qu'une seule jointure:

SELECT e.Grade, v.Score, e.CaseNum, e.FileNum, e.ActivityNum
FROM Evaluation e
INNER JOIN Value v ON e.CaseNum = v.CaseNum AND e.FileNum = v.FileNum AND e.ActivityNum = v.ActivityNum
0
user3175748

Vous voudriez essentiellement quelque chose comme:

SELECT e.*, v.Score
  FROM Evaluation e
LEFT JOIN Value v
ON v.CaseNum = e.CaseNum AND
v.FileNum = e.FileNum AND
v.ActivityNum = e.ActivityNum;
0
Jason Colyer
SELECT E.CaseNum, E.FileNum, E.ActivityNum, E.Grade, V.Score
FROM Evaluation E
INNER JOIN Value V
ON E.CaseNum = V.CaseNum AND E.FileNum = V.FileNum AND E.ActivityNum = V.ActivityNum
0
zXSwordXz