【问题标题】:Select columns from 4 tables从 4 个表中选择列
【发布时间】:2013-01-06 02:37:26
【问题描述】:

首先,我对 SQL 完全陌生,看过一些教程、视频,尝试搜索但没有找到我需要的东西。我知道它以前问过,但我找不到。

我需要找到的基本上是这样的

选择 Company.Name、Programmer.Name、Manager.Name、CEO.Name

其中 Company.City = Programmer.City = Manager.City = CEO.City

喜欢选择所有来自伦敦的人。

编辑:尝试仅使用 2 个表执行此操作,代码如下,但出现错误

无法绑定多部分标识符“Company.Name”。

SELECT Company.Name
    FROM Company Cm
    INNER JOIN Programmer Pg
        ON Cm.City = Pg.City
    WHERE Cm.City = 'London'

【问题讨论】:

    标签: select sql-server-2012 multiple-columns


    【解决方案1】:

    尝试使用您分配的别名:

    SELECT Cm.Name
        FROM Company as Cm
        INNER JOIN Programmer as Pg
            ON Cm.City = Pg.City
        WHERE Cm.City = 'London'
    

    你可以扩展模式:

    select Cm.Name, Cm.Address,
      Pg.Name, Pg.Address,
      Mgr.Name, Mgr.Address
      from Company as Cm inner join
        Programmer as Pg on Pg.City = Cm.City inner join
        Manager as Mgr on Mgr.City = Cm.City
      where Cm.City = 'London'
    

    这将返回所有表都有匹配数据的行,即City

    如果您希望在某些数据可能丢失的地方返回行,例如经理但没有程序员,那么您可以使用left outer join 而不是inner join。使用 outer join 在构造 where 子句时需要小心,以避免将连接从外部转换回内部。

    select Cm.Name, Cm.Address,
      Pg.Name, Pg.Address,
      Mgr.Name, Mgr.Address
      from Company as Cm left outer join
        Programmer as Pg on Pg.City = Cm.City left outer join
        Manager as Mgr on Mgr.City = Cm.City
      where Cm.City = 'London'
    

    【讨论】:

    • 同样的事情,同样的错误。编辑:我的错误,修复了它,为什么它给我的代码错误?
    • 最后一件事,如何向该查询添加第三个表?如果我在 cm.city = mg.city 上使用另一个内部联接(例如内部联接管理器)作为 Mg ,它将只检查经理和公司,而不考虑程序员,所以这就像一个“或”,而不是“和”跨度>
    • 当您在查询中为表创建别名时,您可以在不指定源的情况下引用表中的列,例如Name,(只要列名是唯一的),或使用别名,例如Cm.Name。不能使用表名。
    • @Legjendat - 我添加了一个外连接示例。尝试修改onwhere 子句。如果将第二个 on 更改为 on Mgr.City = Pg.City 会发生什么?或者添加到where 一个额外的and Pg.Name > Alice'`。看似无害的更改对外部连接有很大影响。
    • 非常感谢,您的回答非常清楚,您会成为比我现在的老师更好的老师:)
    猜你喜欢
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 2013-11-05
    • 2020-03-21
    • 2021-03-19
    • 1970-01-01
    相关资源
    最近更新 更多