繁体   English   中英

从具有多个关系的其他表中获取min()

[英]Fetch min() from other table with multiple relations

我正在尝试为products.desc创建全文搜索。 作为回应,我要

  • 产品:id,desc
  • 价格:与product.id相关的最低价格行
  • 供应商:id,提供该价格的供应商名称。

我目前正在使用

SELECT products.id, MIN(prices.price) as prices_price, prices.id as prices_id, products.desc, products.product_number, prices.supplier_id, suppliers.name FROM products
 INNER JOIN prices
 ON prices.product_id = products.id
 INNER JOIN suppliers
 ON prices.supplier_id = suppliers.id
 WHERE 
 MATCH (products.desc) AGAINST ('test*' IN BOOLEAN MODE)
 GROUP BY prices.product_id

这将返回正确的(最低)价格,尽管其他所有价格的值。*行未确定/错误。 由于GROUP BYprices.product_id会获取ID最低的列/行。

    Products
    id | desc
    ----------------------------------------
    1  | product_1
    2  | product_2


    Prices
    id | product_id | price | supplier_id
    ------------------------------------------------
    1  | 1          | 100   | 1
    2  | 1          | 150   | 2
    3  | 2          | 200   | 2
    4  | 2          | 250   | 1

    Suppliers
    id | name
    ------------------------------------------------
    1  | Supplier1  
    2  | Supplier2   

您必须通过加入对价格进行分组的子查询来获得最低价格,并返回最低价格和相应的product_id。

然后再次加入价格表以获取最低价格的数据集。

然后使用最低价格数据集的vendor_id加入供应商。

小提琴

SELECT
    products.id,
    lowestPrice.price,
    prices.id AS prices_id,
    products.desc,
    prices.supplier_id,
    suppliers.name
FROM
    products
INNER JOIN (
    SELECT
        prices.price,
        prices.product_id
    FROM
        prices
    GROUP BY
        product_id
    HAVING
        MIN(prices.price)
) AS lowestPrice ON lowestPrice.product_id = products.id
INNER JOIN prices ON prices.price = lowestPrice.price AND prices.product_id = lowestPrice.product_id
INNER JOIN suppliers ON prices.supplier_id = suppliers.id
WHERE 
 MATCH (products.desc) AGAINST ('test*' IN BOOLEAN MODE)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM