【问题标题】:SQL join to return a table with multiple columns from other tables replacing its ownSQL 连接返回一个表,其中包含来自其他表的多个列替换它自己的
【发布时间】:2015-08-14 14:13:07
【问题描述】:

我正在尝试编写一个返回 Table1 的 SQL 查询,它有 10 列。该表由一个主键 ID、4 个外键 ID 列和 5 个我想要返回但不更改的其他列组成。目标是进行连接,将外键 ID 替换为其他表中保存的描述。

这是第一个 FK Id 的尝试:

Select * from Table1 t1
            left join Table2 t2
            on t1.BranchId = t2.BranchId;

此左连接返回 table2 的描述,但不替换它。

这是另一个带有第一个 FK Id 的:

Select t2.BranchName from Table1 t1
            left join Table2 t2
            on t1.BranchId = t2.BranchId;

这会返回我想要的名称,但不会完全返回 table1。

为了举例,您可以假设 OtherName3、OtherName4、OtherName5 分别位于表 Table3、Table4、Table5 中。

这对于有经验的 SQL 开发人员来说可能看起来微不足道,但我很难弄清楚语法。

谢谢!

【问题讨论】:

  • “替换它”是什么意思?
  • 明确指定您想要的每一列:select t1.col1, t1.col2, t2.col1, t3.col2 ...
  • 当 table2 由 id 及其名称组成时,将 Table1 中的 BranchId 替换为 table2 中的名称
  • Gordon 和我的回答都应该正是您所需要的,您需要对实际的列名进行一些按摩。
  • 好的,我试试看。看起来像我所指的

标签: sql sql-server database sql-server-2008 join


【解决方案1】:

我不知道你说的替换是什么意思。

我认为你只需要列出你想要的所有列:

Select t1.col1, t1.col2, t1.col3, . . .,
       t2.name
from Table1 t1 left join
     Table2 t2
     on t1.BranchId = t2.BranchId;

【讨论】:

    【解决方案2】:

    我不知道你所说的“替换”是什么意思,但你只需要限定你想要哪个表中的哪些列。这适用于您加入的所有表,特别是如果它们在多个表中具有相同的列名。由于我不了解您的表格,所以我将垃圾列放入其中,但您应该了解总体思路。

    Select t2.BranchName, t1.BranchId, t1.Name, t1.Amount, t2.BranchLocation from Table1 t1
    left join Table2 t2
    on t1.BranchId = t2.BranchId;
    

    【讨论】:

      【解决方案3】:

      我想这就是你要找的东西:

      select t1.*, t2.BranchName from Table1 t1
                  left join Table2 t2
                  on t1.BranchId = t2.BranchId;
      

      完全返回 Table1(所有列),仅返回 Table2 中的描述(BranchName)。

      如果使用 SQL Server,请在此处查看 SELECT 子句的所有语法选项: https://msdn.microsoft.com/en-us/library/ms176104.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-26
        • 2021-10-03
        • 2020-04-06
        • 2013-12-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多