[英]How to left join two tables on specific conditions
我有两张表 Price(Type, Values) 和 Product(Seat) 和一些值。
Price | Product
-------------+---------
Type Values | Seat
S 4 | FO
P 6 | CA
| FA
我知道[FO]和[CA]属于[P]类型,[FA]属于[S]类型。 如何加入这些表并显示关联的类型和值:
结果
Seat Type Values
----- ----- -----------
FO P 6
CA P 6
FA S 4
我会使用派生表来存储price
和seat
之间的映射。 当出现新需求时,这很容易扩展。
SELECT pri.*, pro.*
FROM price pri
INNER JOIN (
SELECT 'FO' seat, 'P' price
UNION ALL SELECT 'CA' seat, 'P' price
UNION ALL SELECT 'FA' seat, 'S' price
) map ON map.pri = pri.price
INNER JOIN product pro ON pro.seat = map.pro
这可以通过使用VALUES()
语法来简化:
SELECT pri.*, pro.*
FROM price pri
INNER JOIN (
VALUES('FO', 'P'), ('CA', 'P'), ('FA', 'S')
) AS map(seat, price) ON map.pri = pri.price
INNER JOIN product pro ON pro.seat = map.pro
您可以像这样join
表格:
select pr.seat, sum(p.value)
from price p join
product pr
on pr.seat in ('FO', 'CA') and p.type = 'P' or
pr.seat in ('FA') and p.type = 'S'
group by pr.seat;
也就是说,您应该有一个合适的表格将座位连接到产品,可能称为ProductSeats
,每个产品有一排和匹配的座位。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.