2013-06-23 71 views
0

我在SQL中有一個問題,我試圖解決。我知道答案很簡單,但我無法做到。我有兩張桌子,一張是顧客,另一張是訂單。這兩個表使用customer_id連接。問題是要列出所有沒有下訂單的顧客!問題是要在GIS桌面軟件MapInfo Professional中運行,因此並非每個SQL命令都適用於該程序。換句話說,如果我不僅僅是解決這個問題,我會很感激。一個簡單的嵌套SQL語句

這裏是我如何一直在思考:

SELECT customer_id 
from customers 
WHERE order_id not in (select order_id from order) 
    and customer.customer_id = order.customer_id 

回答

2

如何:

SELECT * from customers 
WHERE customer_id not in (select customer_id from order) 

的邏輯是,如果我們沒有爲了一個CUSTOMER_ID這意味着,客戶從來沒有下了訂單。正如你所提到的,customer_id是公共密鑰,因此上面的查詢應該獲取所需的結果。

+0

它的工作!這就說得通了。我知道答案很簡單。 非常感謝您的幫助! –

+0

我不能滿意答案,因爲我有1的聲譽!我希望我能接受答案並將問題標記爲已回答! –

+0

@Latvian你不能upvote,但你應該肯定能接受 –

0
SELECT c.customer_id 
FROM customers c 
LEFT JOIN orders o ON (o.customer_id = c.customer_id) 
WHERE o.order_id IS NULL 
0

...未EXISITS方式:

SELECT * FROM customers 
WHERE NOT EXISTS ( 
    SELECT * FROM orders 
    WHERE orders.customer_id = customer.customer_id 
) 
0

有一些問題,你的方法:

  1. 有可能是在客戶表中沒有的order_id,但在你的地方 - 你提到它的語句
  2. where-statement(order.customer_id)中的別名(或表名)順序未知,因爲在那裏沒有連接語句
  3. 如果將有一個連接,你會過濾掉所有的客戶沒有訂單,你想要

你的問題difficualt回答對我有什麼剛好相反,因爲我不知道哪個SQL子集MapInfo的GIS理解,但讓我們嘗試:

select * from customers c where not exists (select * from order o where o.customer_id=c.customer_id)