我有2张桌子,一张叫“产品”,一张叫“图片”。 表“图像”保存每个产品的图像,因此每个产品可以有5个图像。
我想做一个只针对每种产品只回溯1张图片的选择。我是新加入的,所以我不知道如何解决这个问题。
我正在尝试:
SELECT *
FROM products
INNER JOIN images ON products.id=images.prod_id
WHERE products.cat='shoes'
我需要在图像表上添加限制0,1。我怎么能这样做?
提前致谢。
答案 0 :(得分:8)
也许子选择是一个更好的解决方案。
这样的事情:
SELECT
productId,
productName,
(SELECT imageData FROM Image i WHERE i.productId = productId LIMIT 1) AS imageData
FROM Products
答案 1 :(得分:3)
最好避免使用子查询,因为它们在mysql中很慢。
如果您想获得与产品相关的任何图片, 你可以用快速但不是很好的方式做到这一点:
SELECT *
FROM products
INNER JOIN images ON products.id=images.prod_id
WHERE products.cat='shoes'
GROUP BY products.id
如果您想获得第一张图片(按照任何标准),请应用groupwise max技术
答案 2 :(得分:0)
查看DISTINCT
答案 3 :(得分:0)
此处的关键是correlated subqueries。
select
*
from
products p,
(
select
*
from
images i
where
i.prod_id = p.id
limit 1
) as correlated
where
p.cat = 'shoes'
答案 4 :(得分:-1)
SELECT * FROM products
LEFT JOIN images ON products.id=images.prod_id
WHERE products.id='1' LIMIT 1
这将返回为您的产品找到的第一张图片以及所有产品详细信息。
如果您想要撤销多个产品,我建议您进行2次查询。
SELECT product data
Loop through product data {
SELECT image data LIMIT 1
}
执行复杂的单个查询通常最终会比几个/几个较小的查询更昂贵。