我有两个表: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。我在这里缺少什么?
答案 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
应该会有更好的效果。