我在w3schools.com上经历了LEFT JOIN的一个例子。 http://www.w3schools.com/sql/sql_join_left.asp
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
上述查询将返回所有没有订单的客户为NULL订单ID +所有客户订单及其订单ID
我应该如何修改此查询,以便它返回所有没有订单的客户+所有订单日期为订单的客户为' 1996-09-18'
提前致谢。
答案 0 :(得分:1)
如果您希望无订单的客户以及具有特定订单日期的客户,则需要WHERE
子句:
SELECT c.CustomerName, o.OrderID
FROM Customers c LEFT JOIN
Orders o
ON c.CustomerID = o.CustomerID
WHERE (o.CustomerID is NULL) OR (o.OrderDate = DATE '1996-09-18)
ORDER BY c.CustomerName;
如果您希望所有客户在该日期拥有订单(如果他们有),那么您可以将条件移至ON
子句:
SELECT c.CustomerName, o.OrderID
FROM Customers c LEFT JOIN
Orders o
ON c.CustomerID = o.CustomerID AND o.OrderDate = DATE '1996-09-18
ORDER BY c.CustomerName;
注意区别:第一个过滤客户。第二个只影响显示的顺序(通常会显示NULL
)。