返回没有销售的客户

时间:2013-02-19 11:41:40

标签: sql sql-server

我是SQL的初学者,如果这看起来很简单/基本,那么道歉。我正在努力探索它......

我正在尝试生成结果,显示客户表中从未下过订单的所有客户,因此在发票表上没有条目。

换句话说,我想从客户表中选择发票表中没有客户编号条目的所有客户。

非常感谢, 麦克

3 个答案:

答案 0 :(得分:3)

SELECT *
FROM customer c
WHERE NOT EXISTS (
         SELECT 1
           FROM invoice i
          WHERE i.customerid = c.customerid
      )

我建议你也阅读有关不同类型的表连接here的Oracle文档。

答案 1 :(得分:2)

如果要返回所有客户行,则需要使用LEFT JOIN

select *
from customer c
left join invoices i
  on c.customerid = i.customerid
where i.customerid is null

请参阅SQL Fiddle with Demo

如果您需要帮助学习JOIN语法,那么这里有一个很棒的visual explanation of joins

即使LEFT JOIN表中没有匹配的行,customer也会返回invoices表中的所有行。如果您只想返回两个表中匹配的行,那么您将使用INNER JOIN。通过向查询添加where i.customerid is null,它将仅返回invoices中没有匹配的行。

答案 2 :(得分:2)

如果customer_id是识别客户的列,那么你应该做这样的事情......

select * from Customer
where customer_id not in (select customer_id from invoice)