sql数据库多表查询排序过滤
例:某商品在数据库中有多种促销方式,普通方式模糊搜索会带出该商品的多种促销, 因此需要对商品按照促销的优先级进行处理。
方法一:
第一次操作是将商品查出,然后将商品循环,放入数据库作对比进行查询
处理的mapper如下:(按照需求将*号更换)
经过这样的处理后,可以实现上述要求 。
方法二:
依然是先查出商品,然后查出所有促销方式,通过**steam()**方法进行过滤,一样可以实现该要求。因为懒得动所以没做。
方法三:
我想要一个sql语句得出结果。方法如下:
这里使用的是mybatis-plus和Lambda表达式,如果不熟悉也可以换成mybatis也没什么问题。
解释一下:我需要查询所有商品,其中的条件是,当我查询到该商品时,该商品下的所有促销中取优先级最高的,及MAX(优先级)
sql语句如下:
SELECT * FROM TPRCPRICEPRJBODY TP
LEFT JOIN TPRCPRICEPRJ tj on tj.PRICEPRJCODE = tp.PRICEPRJCODE
LEFT JOIN VCOBPLU VC ON VC.PluId = TP.PLUID
where tj.prjtype in
( SELECT MAX(TPJ.PRJTYPE) FROM TPRCPRICEPRJBODY TPR
LEFT JOIN TPRCPRICEPRJ TPJ ON TPR.PRICEPRJCODE = TPJ.PRICEPRJCODE
WHERE TPR.PLUID = TP.PLUID)
注:
促销明细:TPRCPRICEPRJBODY
促销主表:TPRCPRICEPRJ
商品表: VCOBPLU