[英]Fetch min() from other table with multiple relations
我正在尝试为products.desc创建全文搜索。 作为回应,我要
我目前正在使用
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.