我在 sql 查询执行以下操作时遇到问题:
我需要从产品表中选择所有产品,对于每个产品,我需要从图像表中加入主图像(所有列)。产品图像表包含图像-产品关系和列 sortWeight。主图像是排序权重最小的图像。
为了获得主要产品图片,我会这样做:
SELECT * FROM images WHERE product=SOME_PRODUCT ORDER BY sortWeight ASC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
获取所有产品:
SELECT * FROM products;
Run Code Online (Sandbox Code Playgroud)
现在我需要以某种方式加入这两个,但问题是我不知道如何绕过以下限制:
SELECT P.* FROM products AS P
LEFT JOIN
(SELECT * FROM images AS I WHERE I.product=P.id ORDER BY sortWeight ASC LIMIT 1) AS I1
Run Code Online (Sandbox Code Playgroud)
问题是 MySQL 不知道子查询中的 P.id 是什么。我也尝试过这样的:
SELECT P.* FROM products AS P
LEFT JOIN
(SELECT * FROM images AS I WHERE ORDER BY sortWeight ASC LIMIT 1) AS I1 ON (I1.product = P.id)
Run Code Online (Sandbox Code Playgroud)
但我认为这不会给出准确的结果,因为子查询存在限制,并且它可能会从具有较小排序权重的另一个产品中选择图像。
谁能帮我重写这个?谢谢。
尝试将其加入子查询,该子查询返回min每个图像具有最小 () sortWeight 的图像product。
这将返回每个产品的最小 sortWeight:
select product, min(sortWeight) as sortWeight
from images
group by product
Run Code Online (Sandbox Code Playgroud)
这是组合版本:
SELECT P.*, i.*
FROM products AS P
left join images as i on p.id = i.product
LEFT JOIN (
select product, min(sortWeight) as sortWeight
from images
group by product
) t on t.product = i.product and i.sortWeight = t.sortWeight
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2084 次 |
| 最近记录: |