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

我有两个名为 EvaluationValue 的表。

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

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

我可以多次使用INNER JOIN 来执行此操作吗?

【问题讨论】:

    标签: mysql sql sql-server


    【解决方案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
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-05-30
              • 1970-01-01
              • 1970-01-01
              • 2022-06-17
              • 2014-08-22
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多