2015-05-04 2 views
2

Я создал 3 вида с одинаковыми столбцами - количество, год и разнообразие. Я хочу присоединиться ко всем трем таблицам по году и разнообразию, чтобы сделать некоторые вычисления с количествами.Присоединение 3 таблиц на 2 столбца?

Проблема в том, что конкретная комбинация года/разновидности не встречается на каждом изображении.

Я пробовал запросы, как:

SELECT 
    * 
FROM 
a 
    left outer join 
b 
    on a.variety = b.variety 
    left outer join 
c 
    on a.variety = c.variety or b.variety = c.variety 
WHERE 
    a.year = '2015' 
    and b.year = '2015' 
    and a.year= '2015' 

Очевидно, что это не является правильным решением. В идеале я хотел бы присоединиться к году и разнообразию, а не использовать какое-либо заявление.

Желаемый результат будет содержать все количества совпадающего года и разнообразия в одной строке, независимо от нулевых значений на таблице.

Я очень ценю помощь, спасибо.

ответ

1

Вы хотите полное внешнее соединение, а не левое соединение, например, так:

Select coalesce(a.year, b.year, c.year) as Year 
    , coalesce(a.variety, b.variety, c.variety) as Variety 
    , a.Quantity, b.Quantity, c.Quantity 
from tableA a 
full outer join tableB b 
    on a.variety = b.variety 
    and a.year = b.year 
full outer join tableC c 
    on isnull(a.variety, b.variety) = c.variety 
    and isnull(a.year, b.year) = c.year 
where coalesce(a.year, b.year, c.year) = 2015 

Левое присоединиться вы используете не подберут значения из Ь или с, которые не являются в. Кроме того, предложение where выдает строки, которые не имеют значений во всех трех таблицах (поскольку год в этих строках равен NULL, который не равен 2015). Полное внешнее соединение будет захватывать строки из любой таблицы в соединении, независимо от того, содержит ли другая таблица совпадение.

+0

Вы - спасатель. работали все утро, складывая взгляды и чувствовали, что мое лицо тает. Спасибо! – user2486993

Смежные вопросы