2014-11-02 94 views
0

我有一个客户表这样指定客户没有订单

customers_id | customers_date_added 
----------------------------- 
    1   | 2012-10-13 09:31:38 
    2   | 2013-12-13 08:31:38 
    3   | 2014-09-13 10:31:38 
    4   | 2013-08-13 09:31:38 
    5   | 2011-07-13 14:31:38 

像这样

orders_id | customers_id 
------------------------------- 
    1   |  2 
    2   |  3 
    3   |  5 
    4   |  5 
    5   |  2 

我试图让谁没有任何订单的客户的订单表,并于2012年注册,在这种情况下,我想获取customers_id 1和4.

这不起作用。

SELECT customers_id 
FROM customers 
WHERE customers_id NOT IN (
    SELECT DISTINCT customers_id 
    FROM orders 
) 
AND EXTRACT(YEAR FROM customers_date_added) = '2013' 
OR EXTRACT(YEAR FROM customers_date_added) = '2012' 

我的查询出了什么问题?

+0

它不应该是'并提取(一年DATE_ADDED)=“2013'',而不是'和提取(一年customers_date_added)=“2013'' – pbaldauf 2014-11-02 10:05:46

+0

你需要的时候,你要用就用大括号等查询应该是SELECT customers_id 客户 WHERE customers_id NOT IN( SELECT DISTINCT customers_id 从接单 ) AND(EXTRACT(YEAR来自custo ('2012''0123') – SMA 2014-11-02 10:09:51

+0

@ pbaldauf我修正了错误的列名 – 2014-11-02 10:12:54

回答

1

你为什么不使用LEFT JOIN这样的:

SELECT customers.customers_id 
FROM customers 
LEFT JOIN order ON customers.customers_id = order.customers_id 
WHERE order.customers_id IS NULL 
AND customers.customers_date_added BETWEEN '2012-01-01 00:00:00' AND '2013-12-31 23:59:59' 
+0

工作正常,并与左连接它是最快的查询 – 2014-11-02 11:13:36

0

使用

SELECT customers_id 
FROM customers 
WHERE customers_id NOT IN (
SELECT customers_id 
FROM order 
) 
0

使用此:

SELECT customers_id 
FROM customers 
WHERE customers_id NOT IN (SELECT DISTINCT customer_id FROM orders) 
AND date_added BETWEEN '2012-01-01 00:00:00' AND '2013-12-31 23:59:59' 
0

其实你的说法的作品,看到小提琴:FIDDLE

你也可以用同样的结果

SELECT customers_id 
FROM customers 
WHERE customers_id NOT IN (
      SELECT DISTINCT customers_id 
      FROM orders 
     ) 
AND customers_date_added LIKE '2013%' 
OR customers_date_added LIKE '2012%' 
做到这一点这里

OR

SELECT customers_id 
FROM customers 
WHERE customers_id NOT IN (
      SELECT DISTINCT customers_id 
      FROM orders 
     ) 
AND EXTRACT(YEAR FROM customers_date_added) IN ('2013', '2012')