SQL显示找到的和在商品订单中找不到的记录

时间:2014-04-02 16:55:35

标签: sql oracle

我的任务是显示在相同结果中已订购和未订购特定商品的客户。我的表加入了CustomerNumber:

Customers Table:

CustomerNumber    CustomerName
-------------     ------------
1007              H&G Groceries
2548              Jims Restaurant
2005              Tangs Asian Foods


Orders Table:

CustomerNumber    ItemNumber    ItemDescripton    NumberOrdered
--------------    ----------    --------------    -------------
1007              2055          Cheese            3
2548              8784          Canned Beans      6
2005              1199          Dozen Large Eggs  10

如果我要求 ItemNumber = 2055

的购买历史记录

这是我想要显示结果的方式。现在请记住,所有客户至少在一个项目的订单表中

CustomerName     ItemNumber    ItemDescription  NumberOrdered
------------     ----------    ---------------  -------------

H&G Groceries    2055          Cheese           3
Jims Restaurant                                 0
Tangs Asian Food                                0

实际上NumberOrder可能只是空白而没有必要有0

这就是我的尝试。

    Select c.CustomerName,

    o.ItemNumber,

    o.ItemDescription,

    o.NumberOrdered

    From Customers C

    Left Join Orders o ON c.CustomerNumber = o.CustomerNumber

    Where o.OrderNumber = 2055;

这只返回H& G Groceries的一条记录。

2 个答案:

答案 0 :(得分:1)

Where o.OrderNumber = 2055
    or o.OrderNumber is null

当您使用外连接时,您必须在WHERE子句中考虑空值。

或者,您可以将条件置于JOIN条件:

Select c.CustomerName,
    o.ItemNumber,
    o.ItemDescription,
    o.NumberOrdered
From Customers C
Left Join Orders o 
    On c.CustomerNumber = o.CustomerNumber
    And o.OrderNumber = 2055;

答案 1 :(得分:0)

你应该使用左外连接。即。

从CustomersTable中选择* 在CustomerTable.CustomerNumber = OrdersTable.CustomerNumber

上LEFT JOIN OrdersTable