如果这看起来微不足道/基本,我对于一个初学SQL的人来说很抱歉。我正努力让自己的头...没有销售的退货客户
我想生成结果,显示所有客户在客户表中从来没有下过订单,因此没有发票表上的条目。
换句话说,我想从客户表,其中有在发票表他们的客户数量没有进入选择所有客户。
非常感谢, 麦克
如果这看起来微不足道/基本,我对于一个初学SQL的人来说很抱歉。我正努力让自己的头...没有销售的退货客户
我想生成结果,显示所有客户在客户表中从来没有下过订单,因此没有发票表上的条目。
换句话说,我想从客户表,其中有在发票表他们的客户数量没有进入选择所有客户。
非常感谢, 麦克
SELECT *
FROM customer c
WHERE NOT EXISTS (
SELECT 1
FROM invoice i
WHERE i.customerid = c.customerid
)
我建议你也看到甲骨文的文档在不同类型的表连接here。
如果要返回所有客户行,那么你将要使用LEFT JOIN
select *
from customer c
left join invoices i
on c.customerid = i.customerid
where i.customerid is null
如果您需要帮助学习JOIN
语法,那么这里是一个伟大的visual explanation of joins。
即使invoices
表中没有匹配的行,A LEFT JOIN
也会返回customer
表中的所有行。如果您只想返回两个表中匹配的行,那么您将使用INNER JOIN
。通过将where i.customerid is null
添加到查询中,它将只返回invoices
中没有匹配的那些行。
我想他只想要那些不在发票表格中的顾客...所以你应该检查i.customerid是否在where子句...过滤,如果你做了左连接 – Frederic 2013-02-19 11:47:45
@Frederic的位置在'WHERE'条款是正确的 - 看到这个演示 - http://www.sqlfiddle.com/#!3/bd4f8/3 – Taryn 2013-02-19 11:50:16
where子句wasnt那里,当我评论.. probly你当我的评论编辑。 。或者我很昏昏欲睡...无论如何,很好的答案BF – Frederic 2013-02-19 13:06:29
如果CUSTOMER_ID是找出你应该做这样的事情的客户collumn ...
select * from Customer
where customer_id not in (select customer_id from invoice)
谢谢,这似乎得到了我想要的结果。你介意解释你为什么使用'SELECT 1' - 它意味着什么? – Mike 2013-02-19 11:55:36