如何在 SQL 中通过多列连接两个表?
Posted
技术标签:
【中文标题】如何在 SQL 中通过多列连接两个表?【英文标题】:How to join two tables by multiple columns in SQL? 【发布时间】:2015-01-11 01:29:47 【问题描述】:我有两个名为 Evaluation
和 Value
的表。
在这两个表中,都有四列。但是四个中的三个是相同的。换句话说,它们都有CaseNum
、FileNum
、ActivityNum
列。除此之外,Evaluation
表有Grade
列,Value
表有Score
列。
我想将两者合并到一个表中,通过CaseNum
、FileNum
和ActivityNum
连接,所以我有一个五列的新表,包括Value
和Score
。
我可以多次使用INNER JOIN
来执行此操作吗?
【问题讨论】:
【参考方案1】:是的:您可以使用Inner Join
加入多个列。
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
创建表
CREATE TABLE MyNewTab(CaseNum int, FileNum int,
ActivityNum int, Grade int, Score varchar(100))
插入值
INSERT INTO MyNewTab Values(CaseNum, FileNum, ActivityNum, Grade, Score)
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
【讨论】:
【参考方案2】:不,只需在 1 个内部连接语句的“ON”子句中包含不同的字段:
SELECT * from Evalulation e JOIN Value v ON e.CaseNum = v.CaseNum
AND e.FileNum = v.FileNum AND e.ActivityNum = v.ActivityNum
【讨论】:
【参考方案3】:您应该只需要进行一次连接:
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
【讨论】:
【参考方案4】:你基本上会想要一些类似的东西:
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;
【讨论】:
【参考方案5】: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
【讨论】:
以上是关于如何在 SQL 中通过多列连接两个表?的主要内容,如果未能解决你的问题,请参考以下文章
怎么在Delphi中通过BDE建立SQL Server数据库连接
在 SQL Server 2008 中通过联接在更新表中长时间执行
MS Access 中通过 ODBC 连接 MS SQL 表的查询非常慢