查询的结果作为MySQL中WHERE语句的参数

时间:2015-04-28 03:22:58

标签: mysql sql

我有两个表:orders和orderProducts。它们都有一个名为' order_id'。

的列

订单有一个名为' date_created'的列。 ordersProducts有一个名为' SKU'

的列

我想在日期范围内选择SKU。

到目前为止,我的查询是:

SELECT `SKU`
FROM `orderProducts`
INNER JOIN orders
ON orderproducts.order_id = orders.order_id
WHERE orders.order_id in (SELECT id FROM orders WHERE date_created BETWEEN '2014-10-01' AND '2015-03-31' ORDER BY date_created DESC)

查询运行但它返回nothings。我在这里缺少什么?

3 个答案:

答案 0 :(得分:2)

尝试将date条件放在where子句中,不需要子查询:

select op.`SKU`
from `orderProducts` op
join `orders` o using(`order_id`)
where o.`date_created` between '2014-10-01' and '2015-03-31'

答案 1 :(得分:1)

尝试在 where 条件中使用子句作为日期,不需要使用子查询。

SELECT `SKU`
FROM `orderProducts`
INNER JOIN orders 
ON orderproducts.order_id = orders.order_id
WHERE  date_created BETWEEN '2014-10-01' AND '2015-03-31' ORDER BY date_created DESC;

答案 2 :(得分:0)

有几种选择。我更喜欢使用exists

select sku
from orderproducts op
where exists (
    select 1
    from orders o 
    where o.orderid = op.orderid
        and o.datecreated between '2014-10-01' and '2015-03-31')

使用join时,您可能需要使用distinct来消除重复项。或者,您可以使用in获得相同的结果,但exists应该会有更好的效果。