SQL 对比查询

SQL Comparison query

我正在练习查询以提高我的 SQL 技能(我是初学者)并且我 运行 遇到了这个问题,我需要帮助使用 Northwind 数据库。请求的查询应该:

对于拥有 销售给同城客户

我为此写的是:

    USE Northwind;
    SELECT DISTINCT FirstName, LastName, e.City
    FROM Employees e
    INNER JOIN Orders o ON e.EmployeeID = O.EmployeeID
    INNER JOIN Customers c ON o.CustomerID = c.CustomerID
    INNER JOIN Customers ON c.City = e.City
    WHERE e.City = ANY(SELECT Customers.City FROM Customers);

我返回了 6 个员工,但我不确定他们是否正确,我相信我的 WHERE 语句也是错误的。

基本上我的问题是,我是否使用了正确的连接语句以及如何使用 WHERE 语句过滤结果?我不确定如何将一个特定记录与其他记录进行比较。来自 Java 背景,我习惯于 for-loops,它可以检查每个人 "object"(记录)与另一个 "object" 的特定字段。在这种情况下,我想知道如何检查 Employees table 中每条记录的 City 属性与 Customers table 中记录的 City 属性。感谢任何和所有建议,谢谢!

我认为您只需要加入客户 table 一次,并且满足两个要求(与员工在同一个订单和同一个城市)作为加入条件,例如

 SELECT DISTINCT FirstName, LastName, e.City
    FROM Employees e
    INNER JOIN Orders o ON e.EmployeeID = O.EmployeeID
    INNER JOIN Customers c ON o.CustomerID = c.CustomerID AND c.City = e.City

或者,您可以仅在订单 ID 上加入客户并在 where 子句中过滤城市要求。在性能方面应该没有任何区别,但是如果您要在某个时候回顾脚本,它可能会帮助您记住

 SELECT DISTINCT FirstName, LastName, e.City
    FROM Employees e
    INNER JOIN Orders o ON e.EmployeeID = O.EmployeeID
    INNER JOIN Customers c ON o.CustomerID = c.CustomerID
    WHERE e.City = C.City

我认为让您头脑清醒的重要部分是,在您加入 table 后,它实际上是一个 table,其中包含来自两个列(或多个包含多个联接)的列。内部连接条件将过滤掉两个 table 之间不匹配的行,然后您可以比较列