2016-01-28 188 views
2

我有一個關於如何這樣獲取:從一個客戶的訂單表(Oracle)的數據問題:SQL查詢條件選擇

id customer cake   top 
1 001  chocolate  cream 
2 002  chocolate  jam 
3 002  vanilla  cream 
4 003  banana  cream 

我想知道,從客戶,其訂單包括巧克力蛋糕的所有訂單。

正確的結果應該是

id customer cake   top 
1 001  chocolate  cream 
2 002  chocolate  jam 
3 002  vanilla  cream 

我可以在SQL 2個獨立的查詢做到這一點,但有什麼辦法在單個查詢做到這一點?

非常感謝!

+0

哪個RDBMS是爲了這個?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –

回答

2

你應該使用一個子查詢來獲取客戶:

select * from order where customer in (
    select distinct customer from order where cake = 'chocolate' 
) 
+0

子查詢是一個更正確的詞我猜:) – Shyju

+0

謝謝!真的行! – user5004724

1

是選擇不同的客戶,其訂單包括巧克力會工作的子查詢:

select 
    * 
from 
    order 
where 
    customer 
in (select 
     distinct customer 
    from 
     order 
    where 
     cake = 'chocolate') 
1

爲此,可以使用內做查詢。

SELECT * FROM ORDER WHERE CUSTOMER IN (
    SELECT CUSTOMER FROM ORDER WHERE cake = 'chocolate' 
) 
1

像這樣的東西應該工作:

SELECT * 
FROM customers 
WHERE EXISTS (SELECT 1 
       FROM order_details 
       WHERE customers.id = order_details.customer_id 
       AND cake = 'chocolate'); 

編輯:添加了巧克力蛋糕條件。

+0

選擇1將選擇1,我懷疑你的意思是選擇TOP 1? – wentimo

+0

@wentimo不,我不是指頂端1.我寫的方式會選擇1,是的。但這足以找到該行並證明其存在。因爲我們不需要Exists子句中的任何字段,所以使用1代替*會使其運行速度更快並執行相同的操作。 –

+0

好啊,我不知道這個特定模式是一種解決方案。感謝您指出。 – wentimo

0
SELECT * FROM ORDER O1 WHERE EXISTS (
    SELECT NULL FROM ORDER O2 WHERE O1.ID = O2.ID AND cake = 'chocolate' 
) 

您可以嘗試此子查詢的變體。