如何组织多个联接 SQL
How to Organize Multiple Joins SQL
在 SQL 中,当我在一个查询中进行多个联接时,我应该如何将 table 联接在一起。我应该只加入一个 table - 在这种情况下是客户 table 还是可以做我所做的事情(加入不同的 table 因为需要新密钥)?
SELECT O.OrderID, O.OrderDate, C.City, C.Country, C.PostalCode, C.ContactName, O.CustomerID, O.ShipperID, D.ProductID, COUNT(D.ProductID) ProductCount, S.SupplierID
FROM Customers C
INNER JOIN Orders O
ON O.CustomerID = C.CustomerID
INNER JOIN OrderDetails D
ON O.OrderID = D.OrderID
INNER JOIN Products P
ON D.ProductID = P.ProductID
INNER JOIN Suppliers S
ON S.SupplierID = P.SupplierID
WHERE 1 = 1
GROUP BY O.OrderID
ORDER BY OrderDate DESC
我正在使用 W3Schools SQL TryIt 编辑器来测试这个,不确定它是什么数据库引擎!
谢谢!
当然,您可以在一个查询中加入多个 table。这是 SQL.
的很大一部分力量
在您的特定情况下,您不需要连接到 Suppliers
table,因为该列已经在 Products
.
中
此外,您需要注意 SELECT
和 GROUP BY
子句。通常,您应该将所有非聚合列放在 GROUP BY
:
SELECT O.OrderID, O.OrderDate, C.City, C.Country, C.PostalCode, C.ContactName,
O.CustomerID, O.ShipperID, D.ProductID,
COUNT(D.ProductID) as ProductCount,
P.SupplierID
FROM Customers C INNER JOIN
Orders O
ON O.CustomerID = C.CustomerID INNER JOIN
OrderDetails D
ON O.OrderID = D.OrderID INNER JOIN
Products P
ON D.ProductID = P.ProductID
GROUP BY O.OrderID, O.OrderDate, C.City, C.Country, C.PostalCode, C.ContactName,
O.CustomerID, O.ShipperID, D.ProductID, P.SupplierId
ORDER BY OrderDate DESC;
WHERE 1=1
也是不必要的
我想知道这个查询是否真的符合您的要求。但是,您没有说明您实际希望查询执行的操作,所以我只是推测。
你的方法是查找,不要忘记对于每个内部连接,你的记录集可能会减少每个额外连接中不匹配键的数量。
您也可以只使用 JOIN 语法。
在 SQL 中,当我在一个查询中进行多个联接时,我应该如何将 table 联接在一起。我应该只加入一个 table - 在这种情况下是客户 table 还是可以做我所做的事情(加入不同的 table 因为需要新密钥)?
SELECT O.OrderID, O.OrderDate, C.City, C.Country, C.PostalCode, C.ContactName, O.CustomerID, O.ShipperID, D.ProductID, COUNT(D.ProductID) ProductCount, S.SupplierID
FROM Customers C
INNER JOIN Orders O
ON O.CustomerID = C.CustomerID
INNER JOIN OrderDetails D
ON O.OrderID = D.OrderID
INNER JOIN Products P
ON D.ProductID = P.ProductID
INNER JOIN Suppliers S
ON S.SupplierID = P.SupplierID
WHERE 1 = 1
GROUP BY O.OrderID
ORDER BY OrderDate DESC
我正在使用 W3Schools SQL TryIt 编辑器来测试这个,不确定它是什么数据库引擎!
谢谢!
当然,您可以在一个查询中加入多个 table。这是 SQL.
的很大一部分力量在您的特定情况下,您不需要连接到 Suppliers
table,因为该列已经在 Products
.
此外,您需要注意 SELECT
和 GROUP BY
子句。通常,您应该将所有非聚合列放在 GROUP BY
:
SELECT O.OrderID, O.OrderDate, C.City, C.Country, C.PostalCode, C.ContactName,
O.CustomerID, O.ShipperID, D.ProductID,
COUNT(D.ProductID) as ProductCount,
P.SupplierID
FROM Customers C INNER JOIN
Orders O
ON O.CustomerID = C.CustomerID INNER JOIN
OrderDetails D
ON O.OrderID = D.OrderID INNER JOIN
Products P
ON D.ProductID = P.ProductID
GROUP BY O.OrderID, O.OrderDate, C.City, C.Country, C.PostalCode, C.ContactName,
O.CustomerID, O.ShipperID, D.ProductID, P.SupplierId
ORDER BY OrderDate DESC;
WHERE 1=1
也是不必要的
我想知道这个查询是否真的符合您的要求。但是,您没有说明您实际希望查询执行的操作,所以我只是推测。
你的方法是查找,不要忘记对于每个内部连接,你的记录集可能会减少每个额外连接中不匹配键的数量。
您也可以只使用 JOIN 语法。