0
点赞
收藏
分享

微信扫一扫

mysql ---结合案例,优化查询语句及使用not in

code_balance 2022-02-08 阅读 40
mysql

问题:

  • 编写一个SQL查询,报告2019年春季才售出的产品。即仅在2019-01-01至2019-03-31 之间出售的商品。
  • Product table:
product_idproduct_nameunit_price
1S81000
2G4800
3iPhone1400
  • Sales table
seller_idproduct_idbuyer_idsale_datequantity
1112019-01-212
1222019-02-1711
2232019-06-021
3342019-05-132
  • sql语句
//一般思路:在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');
举报

相关推荐

0 条评论