INNER JOIN:在第二个表上限制0,1

时间:2010-07-05 17:47:33

标签: php mysql inner-join

我有2张桌子,一张叫“产品”,一张叫“图片”。 表“图像”保存每个产品的图像,因此每个产品可以有5个图像。

我想做一个只针对每种产品只回溯1张图片的选择。我是新加入的,所以我不知道如何解决这个问题。

我正在尝试:

    SELECT * 
      FROM products
INNER JOIN images ON products.id=images.prod_id 
     WHERE products.cat='shoes'

我需要在图像表上添加限制0,1。我怎么能这样做?

提前致谢。

5 个答案:

答案 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
}

执行复杂的单个查询通常最终会比几个/几个较小的查询更昂贵。

相关问题