2013-02-19 50 views
0

我的導師希望我使用子查詢來執行以下操作:MySQL:如何使用子查詢顯示特定日期後的訂單。

「顯示2006年2月5日或之後下訂單的任何公司的公司名稱。」

到目前爲止,我有:

 
SELECT customer_code 
FROM orders 
WHERE order_date > '2006-02-05'; 

這將產生的結果,但它不是一個子查詢。我怎樣才能用子查詢顯示這個?

+0

提示:嘗試將客戶(或公司或客戶端)表中的查詢與查詢結合使用。 – Tom 2013-02-19 17:27:53

+2

它不完全產生結果。公司名稱在哪裏? – mcalex 2013-02-19 17:32:28

+0

公司'名稱'位於'客戶'表中。 – FionaCat86 2013-02-19 17:36:16

回答

0

試試這個:

SELECT company_name FROM customers 
WHERE id IN 
(SELECT customer_code FROM orders 
WHERE order_date > '2006-02-05'); 

子查詢選擇customer_code從訂單表,其中order_date的是2006-02-05之後。這然後用於選擇company_name FROM customers表WHERE id在子查詢中找到。

也有其他的方法:

SELECT company_name 
FROM orders, customers 
WHERE customer_code = customers.id 
and order_date > '2006-02-05'; 


SELECT company_name 
FROM customers 
JOIN ORDERS 
ON customer_code = customers.id 
AND order_date > '2006-02-05'; 


SELECT company_name 
FROM customers 
JOIN ORDERS 
ON customer_code = customers.id 
WHERE order_date > '2006-02-05'; 

末的查詢是沒有子查詢。使用連接的選項可能是最常用的形式。 SQL FIDDLE DEMO

+0

謝謝你,謝謝,這現在有很多意義!這個連接最初是唯一有意義的東西,我認爲我的問題是習慣了多層次的子查詢。再次感謝! – FionaCat86 2013-02-20 03:00:17

+0

@ FionaCat86很高興我能幫上忙。您可以關閉/刪除您的重複問題。 – 2013-02-20 03:01:53

0

您有查詢會得到你customer_code的某些訂單。但是現在您還需要獲得所有這些customer_code的客戶的姓名。這裏有幾個小技巧,

  1. 你怎麼會得到客戶的名字,如果你有隻是他們customer_code?把它寫成它自己的簡單查詢,與訂單無關。

  2. 現在如果你有多個customer_code,你怎麼能得到客戶的名字?修改來自#1的查詢來執行此操作。

  3. 最後,您已經有了查詢以獲得很多customer_code(來自您的問題)的各種訂單,因此請使用該查詢而不是#2中的customer_codes。您的問題查詢變成子查詢。

請注意,您也可以使用JOIN實現相同的輸出,但是您特別提到了有關子查詢的問題。

+0

不幸的是,我仍然不知道如何做到這一點。我所嘗試的一切都是以錯誤的形式出現的。我知道我需要使用子查詢以某種方式組合這兩個表,但沒有任何作用。有人可以幫幫我嗎? – FionaCat86 2013-02-20 01:51:48

相關問題