Как слева соединить две таблицы на определенных условиях - PullRequest
1 голос
/ 08 октября 2019

У меня есть две таблицы Цена (Тип, Значения) и Продукт (Место) и некоторые значения.

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

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Вы можете 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 с одним рядом на продукт иподходящее место.

1 голос
/ 08 октября 2019

Я бы использовал производную таблицу для хранения сопоставления между 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
...