繁体   English   中英

如何在特定条件下左连接两个表

[英]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

我会使用派生表来存储priceseat之间的映射。 当出现新需求时,这很容易扩展。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM