【发布时间】:2014-11-15 06:18:57
【问题描述】:
我在 MySQL 数据库中有两个表,如下所示:
产品:
product_id | product_name
-----------+-------------
1 | shirt
2 | pants
3 | socks
PRODUCT_SUPPLIER:(id 为主键)
id | supplier_id | product_id | part_no | cost
----+---------------+--------------+-----------+--------
1 | 1 | 1 | s1p1 | 5.00
2 | 1 | 2 | s1p2 | 15.00
3 | 1 | 3 | s1p3 | 25.00
4 | 2 | 1 | s2p1 | 50.00
5 | 2 | 2 | s2p2 | 10.00
6 | 2 | 3 | s2p3 | 5.00
我的目标是一个查询,它连接表并为每个产品输出一行,并以最低成本连接来自相应供应商行的所有字段,如下所示:
product_id | product_name | supplier_id | part_no | cost
-----------+---------------+---------------+------------+---------
1 | shirt | 1 | s1p1 | 5.00
2 | pants | 2 | s2p2 | 10.00
3 | socks | 2 | s3p3 | 5.00
目前我确实编写了以下查询,它似乎有效,但我想从任何更有经验的 SQL 用户那里知道是否有更清洁、更高效或更好的解决方案?或者如果我的代码有什么本质上的错误?
SELECT p.product_id, p.product_name, s. supplier_id, s.part_no, s.cost
FROM product p
LEFT JOIN product_supplier s ON
(s.id = (SELECT s2.id
FROM product_supplier s2
WHERE s2.product_id = p.product_id
ORDER BY s2.cost LIMIT 1));
【问题讨论】:
标签: mysql sql left-join greatest-n-per-group