【问题标题】:SQL Not returning record with null values in some columnsSQL未返回某些列中具有空值的记录
【发布时间】:2017-11-21 19:55:40
【问题描述】:

使用 Microsoft Access,我是 SQL 新手

尝试返回包含所有客户及其订单的查询,包括没有订单的客户。除了一位没有订单的客户外,几乎所有东西都显示出来了。

我目前正试图让记录显示在任何查询中:

SELECT Customer.c_num, customer.cname, salesorder.ordernum, 
salesorder.orderamount
FROM (Customer 
INNER JOIN SalesOrder ON Customer.C_num = SalesOrder.C_Num)
WHERE Customer.C_num = "C101"
OR Customer.C_num = "C102"
OR Customer.C_num = "C103"
OR Customer.C_num = "C104"
OR Customer.C_num = "C105"
OR Salesorder.OrderAmount is NULL
ORDER BY Customer.Cname;

我意识到这是非常不理想的,但我一直在尝试我的技能范围内的一切,现在已经找到了这种不切实际的方法,但仍然失败。

C_Num = C105 的客户是没有出现的客户

我还尝试了任何以“C”开头的 C_Num 的 WHERE LIKE 语句,只是返回空白表

开头很简单:

SELECT Customer.c_num, customer.cname, salesorder.ordernum, 
salesorder.orderamount
FROM (Customer 
INNER JOIN SalesOrder ON Customer.C_num = SalesOrder.C_Num)
ORDER BY Customer.Cname;

【问题讨论】:

    标签: sql database ms-access


    【解决方案1】:

    你应该用LEFT加入表格

    SELECT Customer.c_num, customer.cname, salesorder.ordernum, 
    salesorder.orderamount
    FROM (Customer 
    LEFT JOIN SalesOrder ON Customer.C_num = SalesOrder.C_Num)
    WHERE Customer.C_num = "C101"
    OR Customer.C_num = "C102"
    OR Customer.C_num = "C103"
    OR Customer.C_num = "C104"
    OR Customer.C_num = "C105"
    OR Salesorder.OrderAmount is NULL
    ORDER BY Customer.Cname;
    

    【讨论】:

      【解决方案2】:

      尝试将INNER JOIN 更改为LEFT JOIN。这将显示 customer 表中的所有记录,无论它们是否在 salesorder 表中

      SELECT Customer.c_num, customer.cname, salesorder.ordernum, 
      salesorder.orderamount
      FROM (Customer 
      LEFT JOIN SalesOrder ON Customer.C_num = SalesOrder.C_Num)
      WHERE Customer.C_num = "C101"
      OR Customer.C_num = "C102"
      OR Customer.C_num = "C103"
      OR Customer.C_num = "C104"
      OR Customer.C_num = "C105"
      OR Salesorder.OrderAmount is NULL
      ORDER BY Customer.Cname;
      

      【讨论】:

        【解决方案3】:

        如果您还想订购我们的客户,您应该使用左连接

        SELECT Customer.c_num, customer.cname, salesorder.ordernum, 
        salesorder.orderamount
        FROM Customer 
        LEFT JOIN SalesOrder ON Customer.C_num = SalesOrder.C_Num
        WHERE Customer.C_num  IN  ('C101','C102','C103', 'C104', 'C105') 
        
        ORDER BY Customer.Cname;
        

        你可以使用一个 IN 子句而不是几个 OR (我还删除了 orderamount 不是我认为左连接无用的条件)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-26
          相关资源
          最近更新 更多