如果這看起來微不足道/基本,我對於一個初學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