如何根据其他表参数选择与其他3个表连接的表格的多个最小记录?

发布于 2025-02-13 20:59:20 字数 1178 浏览 0 评论 0原文

我有一个问题。我有4个表:

  1. product_list
  2. product
  3. product_img
  4. pricelist

这个我的查询的样子:

SELECT
  product_list.id,
  product_list.class,
  product.prod_name,
  product.prod_url,
  product.prod_overview,
  product_img.list_prod340x340,
  pricelist.price 
FROM 
(
  (
    (
      product_list 
      INNER JOIN product ON product_list.id = product.prod_list_id
    ) 
    INNER JOIN product_img ON product.id = product_img.prod_id
  ) 
  INNER JOIN pricelist ON product.id = pricelist.prod_id
)
ORDER BY product_list.id, pricelist.price ASC

这是查询的结果 [查询结果] [1]: https://i.sstatic.net.net/v9jo1.jpg

所以问题就是这样。是,我如何仅获得每个prod_name的最低价格。

应将

方式...返回就是
...151600000

请帮忙吗?

I have a question. I have 4 tables:

  1. product_list
  2. product
  3. product_img
  4. pricelist

This what my query looks like:

SELECT
  product_list.id,
  product_list.class,
  product.prod_name,
  product.prod_url,
  product.prod_overview,
  product_img.list_prod340x340,
  pricelist.price 
FROM 
(
  (
    (
      product_list 
      INNER JOIN product ON product_list.id = product.prod_list_id
    ) 
    INNER JOIN product_img ON product.id = product_img.prod_id
  ) 
  INNER JOIN pricelist ON product.id = pricelist.prod_id
)
ORDER BY product_list.id, pricelist.price ASC

This is the result of the query
[QUERY RESULT]
[1]: https://i.sstatic.net/V9JO1.jpg

So the question is, how can i get only the lowest price of each prod_name.

This is how it should be returned

id...prod_name.........price
1...Toyota Agya.........155500000
2...Toyota Calya.........151600000

please help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

素罗衫 2025-02-20 20:59:20

请测试以下测试:

SELECT product_list.id, product_list.class, 
product.prod_name, product.prod_url, 
product.prod_overview, product_img.list_prod340x340, MIN(pricelist.price)
FROM (((product_list 
INNER JOIN product 
    ON product_list.id = product.prod_list_id) 
INNER JOIN product_img 
    ON product.id = product_img.prod_id) 
INNER JOIN pricelist 
    ON product.id = pricelist.prod_id)
GROUP BY product_list.id, product_list.class, product.prod_name, product.prod_url,product.prod_overview, product_img.list_prod340x340
ORDER BY product_list.id, pricelist.price ASC

Please test this:

SELECT product_list.id, product_list.class, 
product.prod_name, product.prod_url, 
product.prod_overview, product_img.list_prod340x340, MIN(pricelist.price)
FROM (((product_list 
INNER JOIN product 
    ON product_list.id = product.prod_list_id) 
INNER JOIN product_img 
    ON product.id = product_img.prod_id) 
INNER JOIN pricelist 
    ON product.id = pricelist.prod_id)
GROUP BY product_list.id, product_list.class, product.prod_name, product.prod_url,product.prod_overview, product_img.list_prod340x340
ORDER BY product_list.id, pricelist.price ASC
执手闯天涯 2025-02-20 20:59:20

最简单的方法可能是以子查询获得价格:

SELECT
  pl.id,
  pl.class,
  p.prod_name,
  p.prod_url,
  p.prod_overview,
  pi.list_prod340x340,
  (
    SELECT MIN(price)
    FROM pricelist prl
    WHERE prl.price = p.id
  ) AS min_price
FROM product_list pl
INNER JOIN product p ON p.prod_list_id = pl.id
INNER JOIN product_img pi ON pi.prod_id = p.id
ORDER BY pl.id, p.id;

由于MySQL 8.0.14,您可以从 rales将子查询移至条款,并使此 hermant hermant Join ,这允许您从价格表中选择多个列:

SELECT
  pl.id,
  pl.class,
  p.prod_name,
  p.prod_url,
  p.prod_overview,
  pi.list_prod340x340,
  prli.price
FROM product_list pl
INNER JOIN product p ON p.prod_list_id = pl.id
INNER JOIN product_img pi ON pi.prod_id = p.id
CROSS JOIN LATERAL
(
  SELECT *
  FROM pricelist prl
  WHERE prl.price = p.id
  ORDER BY prl.price
  LIMIT 1
) prli
ORDER BY pl.id, p.id;

The easiest approach is probably to get the price in a subquery:

SELECT
  pl.id,
  pl.class,
  p.prod_name,
  p.prod_url,
  p.prod_overview,
  pi.list_prod340x340,
  (
    SELECT MIN(price)
    FROM pricelist prl
    WHERE prl.price = p.id
  ) AS min_price
FROM product_list pl
INNER JOIN product p ON p.prod_list_id = pl.id
INNER JOIN product_img pi ON pi.prod_id = p.id
ORDER BY pl.id, p.id;

Since MySQL 8.0.14 you can move the subquery to the FROM clause and make this a lateral join, which allows you to select more than one column from the price table:

SELECT
  pl.id,
  pl.class,
  p.prod_name,
  p.prod_url,
  p.prod_overview,
  pi.list_prod340x340,
  prli.price
FROM product_list pl
INNER JOIN product p ON p.prod_list_id = pl.id
INNER JOIN product_img pi ON pi.prod_id = p.id
CROSS JOIN LATERAL
(
  SELECT *
  FROM pricelist prl
  WHERE prl.price = p.id
  ORDER BY prl.price
  LIMIT 1
) prli
ORDER BY pl.id, p.id;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文