我有这个查询
SELECT p.productId,
p.productTitle,
p.productPrice1,
p.productPrice2,
p.productPart,
pi.productImageTitle,
pi.productImageDescription,
pi.productImageFile,
pi.productImageOrder
FROM product AS p
LEFT JOIN productImage AS pi
ON p.productId = pi.productId
ORDER BY p.productId ASC
我想要的是所有产品,无论他们是否有图像,但如果有联合图像我只想得到一个。目前使用产品b ,它将返回4行,因为有4个图像。
我确实尝试过sub SELECT
in the INNER JOIN
with LIMIT 1
,但只允许加入一张图片。另外,您可以看到数据productImageOrder
并不总是从一开始,所以我不能只在INNER JOIN
答案 0 :(得分:0)
为产品添加GROUP BY应该
SELECT p.productId,
p.productTitle,
p.productPrice1,
p.productPrice2,
p.productPart,
pi.productImageTitle,
pi.productImageDescription,
pi.productImageFile,
pi.productImageOrder
FROM product AS p
LEFT JOIN productImage AS pi
ON p.productId = pi.productId
GROUP BY p.productId
ORDER BY p.productId ASC
答案 1 :(得分:0)
使用
SELECT p.productId,
p.productTitle,
p.productPrice1,
p.productPrice2,
p.productPart,
pi.productImageTitle,
pi.productImageDescription,
pi.productImageFile,
pi.productImageOrder
FROM product AS p
LEFT JOIN productImage AS pi
ON p.productId = pi.productId
GROUP BY p.productId
ORDER BY p.productId ASC
基本上只是添加GROUP BY
子句。
请注意,这是一个MySQLism - 其他RDBMS会抛出“无效使用聚合”或类似错误。
答案 2 :(得分:0)
如何使用select来获取要连接的productImageID
SELECT p.productId,
p.productTitle,
p.productPrice1,
p.productPrice2,
p.productPart,
pi.productImageTitle,
pi.productImageDescription,
pi.productImageFile,
pi.productImageOrder
FROM product AS p
LEFT JOIN productImage AS pi
ON pi.productImageID = (select productImageId from productImage as pi2 where p.productId = pi2.productId order by productImageOrder Limit 1)
ORDER BY p.productId ASC
如果您没有将其他字段放在聚合函数中,例如,此方法可能实际上可用于其他不能使用GROUP BY的RDBMS。 MIN,MAX,SUM等。
答案 3 :(得分:0)
如果要避免外部聚合,可以使用连接:
select p.*, pi.*
from (select p.*,
(select pi.productImageId
from productImage pi
where p.productId = pi.productId
) as productImageId
from product p
) p join
productImage pi
on p.productImageId = pi.productImageId
order by p.productId;
这种方法的三个优点是:
order by
)。您确实需要productImage(productId)
和productImage(productImageId)
上的索引才能获得最佳效果。