如何在 SQL 中通过多列连接两个表?

Posted

技术标签:

【中文标题】如何在 SQL 中通过多列连接两个表?【英文标题】:How to join two tables by multiple columns in SQL? 【发布时间】:2015-01-11 01:29:47 【问题描述】:

我有两个名为 EvaluationValue 的表。

在这两个表中,都有四列。但是四个中的三个是相同的。换句话说,它们都有CaseNumFileNumActivityNum 列。除此之外,Evaluation 表有Grade 列,Value 表有Score 列。

我想将两者合并到一个表中,通过CaseNumFileNumActivityNum 连接,所以我有一个五列的新表,包括ValueScore

我可以多次使用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 表的查询非常慢

如何在 MS Access 2007 或 MS SQL Server 2005 中通过 SQL 将字段转换为行

在多列上组合 sql 内部和外部联接

如何关联数据库中通过 Rails 中的多对多关系连接的两个条目?