2013-02-19 72 views
2

如果這看起來微不足道/基本,我對於一個初學SQL的人來說很抱歉。我正努力讓自己的頭...沒有銷售的退貨客戶

我想生成結果,顯示所有客戶在客戶表中從來沒有下過訂單,因此沒有發票表上的條目。

換句話說,我想從客戶表,其中有在發票表他們的客戶數量沒有進入選擇所有客戶。

非常感謝, 麥克

回答

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

我建議你也看到甲骨文的文檔在不同類型的表連接here

+0

謝謝,這似乎得到了我想要的結果。你介意解釋你爲什麼使用'SELECT 1' - 它意味着什麼? – Mike 2013-02-19 11:55:36

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

即使invoices表中沒有匹配的行,A LEFT JOIN也會返回customer表中的所有行。如果您只想返回兩個表中匹配的行,那麼您將使用INNER JOIN。通過將where i.customerid is null添加到查詢中,它將只返回invoices中沒有匹配的那些行。

+0

我想他只想要那些不在發票表格中的顧客...所以你應該檢查i.customerid是否在where子句...過濾,如果你做了左連接 – Frederic 2013-02-19 11:47:45

+0

@Frederic的位置在'WHERE'條款是正確的 - 看到這個演示 - http://www.sqlfiddle.com/#!3/bd4f8/3 – Taryn 2013-02-19 11:50:16

+0

where子句wasnt那裏,當我評論.. probly你當我的評論編輯。 。或者我很昏昏欲睡...無論如何,很好的答案BF – Frederic 2013-02-19 13:06:29

2

如果CUSTOMER_ID是找出你應該做這樣的事情的客戶collumn ...

select * from Customer 
where customer_id not in (select customer_id from invoice) 
相關問題