mysql - 排序 LEFT JOIN 选择查询
问题描述
我有两个表(产品和产品价格)我想对产品价格行进行排序以在左连接查询中显示为默认价格
例如:产品 id = 14 是两个价格项目(products_price 表中的编号 31,25)
这个单一的查询结果,完美显示就是我想要的:
SELECT id ,p_id ,qty,price,CEILING(price-(price*discount_percent / 100)) AS off_price, CASE qty=0 WHEN 0 THEN 1 ELSE 0 END as not_zero_qty
FROM products_price
WHERE status=1 AND p_id=14
ORDER BY not_zero_qty DESC,off_price ASC
图片:第 31 行的第 31 行正好是第一个显示行 ,但是当我将此查询放入 LEFT JOIN 查询时不起作用,第 25 行第 25 行是要显示的第一行:(
我的 LEFT JOIN 查询和结果是: 图像:查询结果
SELECT p.id,p.title,pp.price_id,pp.off_price
FROM products p
LEFT JOIN (
SELECT id as price_id ,p_id ,discount_percent,qty,price,default_price,CEILING(price-(price*discount_percent / 100)) AS off_price, CASE qty=0 WHEN 0 THEN 1 ELSE 0 END as not_zero_qty
FROM products_price
WHERE status=1
ORDER BY not_zero_qty DESC,off_price ASC ) pp
ON p.id=pp.p_id
WHERE p.status=1
GROUP BY p.id
ORDER BY pp.off_price DESC
解决方案
当您将查询放入 LEFT JOIN 子查询时,除非指定了 LIMIT,否则 SORT BY 没有任何意义。尝试将 ORDER BY 移到外层,有点像
SELECT p.id,p.title,pp.price_id,pp.off_price
, pp.not_zero_qty
FROM products p
LEFT JOIN (
SELECT id as price_id ,p_id ,discount_percent,qty,price,default_price,CEILING(price-(price*discount_percent / 100)) AS off_price, CASE qty=0 WHEN 0 THEN 1 ELSE 0 END as not_zero_qty
FROM products_price
WHERE status=1
GROUP BY price_id
) pp
ON p.id=pp.p_id
WHERE p.status=1
GROUP BY p.id
ORDER BY not_zero_qty DESC, pp.off_price DESC
推荐阅读
- mongodb - 执行聚合以在 pymongo 中按组查找平均值时的编码问题
- javascript - 可以将 HOF 与具有自动绑定的类功能一起使用吗?
- firebase - 类型“UploadMappingFileTask”属性“googleServicesResourceRoot”没有配置值
- swift - 如何在 Swift XCTest 单元测试中捕获标准输出和标准错误?
- g++ - dyld:库未加载:/usr/local/opt/icu4c/lib/libicuuc.68.dylib 原因:找不到图像
- reactjs - 如何实现 FlatList 项目计数器
- python-3.x - 如何在 praw 上获取主页提交
- reactjs - 为什么我在导入组件时打字稿会抱怨,但在同一文件中定义组件时却不会?
- c# - DefaultValue(Type, string) 和 ShouldSerialize 和 Reset 方法。从不使用非常量类型
- python - Webscraping 表格包装器