我认为 OP 需要各种公司中最便宜的价格,而且这些价格也存储在多个表中。
Ex 架构:
create table table1(producer_code varchar(50), price decimal(18,2), company varchar(100));
create table table2(producer_code varchar(50), price decimal(18,2), company varchar(100));
create table table3(producer_code varchar(50), price decimal(18,2), company varchar(100));
insert into table1
select 'ITEM001', 45, 'Company A'
UNION ALL
select 'ITEM002', 200, 'Company B'
UNION ALL
select 'ITEM003', 150, 'Company B';
insert into table2
select 'ITEM001', 50, 'Company B'
UNION ALL
select 'ITEM002', 300, 'Company C'
UNION ALL
select 'ITEM003', 55, 'Company D';
insert into table3
select 'ITEM001', 190, 'Company F'
UNION ALL
select 'ITEM002', 78, 'Company G'
UNION ALL
select 'ITEM003', 100, 'Company A';
我们需要在这里加入 2 个集合。一个是实际的组合集合 A,另一个是包含 producer_code 和最低价格的集合。
select
A.* from
(
SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3
)A
INNER JOIN
(
SELECT producer_code, min(price) AS price FROM (
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3
)B
GROUP BY producer_code
)CHEAP ON A.producer_code = CHEAP.producer_code AND A.price = CHEAP.price;
结果:
+---------------+---------+-------------+
| producer_code | price | company |
+---------------+---------+-------------+
| 'ITEM001' | '45.00' | 'Company A' |
| 'ITEM003' | '55.00' | 'Company D' |
| 'ITEM002' | '78.00' | 'Company G' |
+---------------+---------+-------------+