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 之间不匹配的行,然后您可以比较列
我正在练习查询以提高我的 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 之间不匹配的行,然后您可以比较列