2016-03-13 74 views
0

我試圖用一個子查詢編寫一個SELECT語句,該子查詢確定customer_id和客戶的姓氏 的信用卡最後過期,如我的訂單表 所示,爲此我想使用一個WHERE子句,但由於結果只顯示一個客戶而被卡住... 這裏是我到目前爲止。如果有人可以指導我在正確的道路..在mysql中使用子查詢連接兩個表

SELECT customer_id, last_name 
FROM customers 
WHERE NOT EXISTS 
(SELECT card_expires 
FROM orders 
WHERE customers.customer_id = orders.customer_id 
); 
+0

什麼是'card_expires'?一個約會 ?一個布爾? ... – Enissay

+0

它的一個日期,我有多行不同的日期,如1行是4/20,另一個是5/18 – xTuckii

回答

1

雖然我不清楚根據您的確切過濾或訂購要求,我認爲您可能想從以下開始。

SELECT customer_id, last_name, card_expires 
FROM customers 
    left join ( 
     SELECT card_expires 
     FROM orders 
) o on (customers.customer_id = orders.customer_id) 

使用這種方法,你可以看到所有客戶和card_expires的完整列表,然後你就可以開始下到你想要的過濾列表。您可以根據訂單構建子查詢以選擇特定的訂單子集。我再次不清楚你準備做什麼。但是通過首先選擇所有信息,您將能夠看到所有信息,並能夠決定要過濾的內容。

您可能會決定您還希望查看訂單表中的更多列,以幫助您決定包含/排除哪些訂單。

如果你想只看到客戶的名單。如果你想看到的只是客戶WITHOUT,在未來到期一張卡片,沒有card_expires進入

SELECT customer_id, last_name, card_expires 
    FROM customers 
     left join ( 
      SELECT card_expires 
      FROM orders 
    ) o on (customers.customer_id = orders.customer_id) 
    where o.card_expires is null 

 SELECT customer_id, last_name, card_expires 
     FROM customers 
      left join ( 
       SELECT card_expires 
       FROM orders 
       where card_expires > now() 
     ) o on (customers.customer_id = orders.customer_id) 
     where o.card_expires is null 

當各具特色的SQL語句,這東西可以使它更容易做的先創建返回所有你會使用,以濾除列表中列的SQL語句,則應用過濾器。這將使您可以更輕鬆地添加和刪除標準,直到您擁有正確的標準。

我喜歡將每個標準分割到自己的單獨行中,這樣我就可以輕鬆地用兩條破折號註釋行。 EX:

SELECT customer_id, last_name, card_expires 
    FROM customers 
     left join ( 
      SELECT card_expires 
      FROM orders 
      where card_expires > now() 
    ) o on (customers.customer_id = orders.customer_id) 
    where 0=0 
     and o.card_expires is null 
     -- and last_name = 'Smith' 
0

使用LEFT JOIN/INNER JOIN,我想你想ORDER BY ASC,因爲你想最快

SELECT customer_id, last_name 
FROM customers c 
LEFT JOIN orders o ON o.customer_id = c.customer_id 
ORDER BY card_expires ASC; 
+0

我想使用WHERE子句,任何幫助將是偉大的.. – xTuckii