问题:
- 编写一个SQL查询,报告2019年春季才售出的产品。即仅在2019-01-01至2019-03-31 之间出售的商品。
- Product table:
product_id | product_name | unit_price |
---|
1 | S8 | 1000 |
2 | G4 | 800 |
3 | iPhone | 1400 |
seller_id | product_id | buyer_id | sale_date | quantity |
---|
1 | 1 | 1 | 2019-01-21 | 2 |
1 | 2 | 2 | 2019-02-17 | 11 |
2 | 2 | 3 | 2019-06-02 | 1 |
3 | 3 | 4 | 2019-05-13 | 2 |
//一般思路:在Sales表中找到只有在2019-01-01至2019-03-31出售的商品,但是product_id为2的两行记录有一个符合条件一个符合条件,所以product_id为2商品不符合要求,需要有一个判断操作就像下面所示
SELECT product_id,product_name FROM product
WHERE product_id IN (
SELECT product_id
FROM sales s
WHERE (SELECT COUNT(*) FROM sales s1 WHERE s.product_id = s1.product_id ) =
(SELECT COUNT(*) FROM sales s1 WHERE s.product_id = s1.product_id AND s1.sale_date BETWEEN '2019-01-01' AND '2019-03-31' ));
//优化思路:直接在Sales表中找到不符合要求的product_id,一个not in解决问题
//有时候当sql语句异常麻烦时,转换一下思路
SELECT product_id,product_name FROM product
WHERE product_id NOT IN (SELECT product_id FROM sales s WHERE s.sale_date NOT BETWEEN '2019-01-01' AND '2019-03-31');