我想从另一个表中查询相关数据,在那里我可以获得最低的相关值......
两个表的示例
products
id name description
0 product_1 short description of 1
1 product_2 short description of 2
prices
id product_id option price personal
0 1 3 10.00 1
1 0 2 15.00 1
2 1 3 5.00 0
3 1 3 8.00 0
4 0 2 7.00 1
需要输出
id name description price option
0 product_1 short ... 7.00 2
1 product_2 short ... 10.00 3
我基本上尝试制作的查询是获取所有相关字段的查询,从个人= 1且价格最低的价格中获取相关数据。
当前查询(获得最低价但未关联的选项)
SELECT products.*, prices.option,
(SELECT ROUND( MIN( price ), 2) FROM prices WHERE product_id = products.id AND personal = 1) AS price
FROM products
ORDER BY price_low ASC
答案 0 :(得分:1)
如何使用联接而不是子查询并按产品分组?看起来应该是这样的:
SELECT products.*, ROUND(MIN(prices.price), 2), prices.option
FROM products
INNER JOIN prices ON products.id = prices.product_id
WHERE prices.personal = 1
GROUP BY products.id
我在SqlFiddle上试了here are the results。
答案 1 :(得分:0)
你可以使用内部联接和subselect with和group by来获得最低价格
SELECT p.id, p.name, p.description, pr.option, pr.price
FROM products as p
inner join (
select product_id, min(price) as price
from price
where personal = 1
group by product_id
) t on t.product_id= p.id
inner join price as pr on pr.product_id = p.id and pr.price = t.price
where pr.personal =1
group by p.id, p.name, p.description, pr.option
ORDER BY pr.price ASC
答案 2 :(得分:0)
感谢您对此问题的反馈。经过大量的追踪和错误后,我终于得到了所需的结果,这里是:
SELECT products.*, b.*, products.id as id FROM `products`
LEFT JOIN
(SELECT * FROM
( SELECT * FROM prices ORDER BY product_id ASC, price ASC )
as c GROUP BY product_id)
AS b ON b.product_id = products.id
WHERE `price` IS NOT NULL ORDER BY `product_id` ASC