2016-01-09 2 views
0

У меня есть следующие таблицы:SQL Соединение слева на нескольких таблиц с различными значениями

Table A : 
itemCode quantity 
1   5 
2   6 
3   10 

Table B : 
itemCode quantity 
1   7 
2   23 
4   19 

Table C: 
itemCode quantity 
1   45 
2   23 
5   49 

Я хотел бы иметь таблицу, которая выглядит следующим образом:

itemCode A_Quantity B_Quantity C_Quantity 
1   5   7   45 
2   6   23   23 
3   10   0   0 
4   0   19   0 
5   0   0   49 

Но использование ЛЕВЫЙ ПРИСОЕДИНЯЙТЕ все, что я могу сделать, это иметь таблицу, содержащую строки для itemCode 1,2, которые являются кодами, которые являются общими для всех таблиц.

+0

Не могли бы вы вставьте ваш SQL-запрос, пожалуйста? –

+0

Нет ли ведущей таблицы, содержащей все коды товаров, даже если она не содержит количества? – GolezTrol

ответ

1

Использование union all и агрегация:

select itemcode, 
     max(a) as a, max(b) as b, max(c) as c 
from ((select itemcode, quantity as a, 0 as b, 0 as c from a 
    ) union all 
     (select itemcode, 0 as a, quantity as b, 0 as c from b 
    ) union all 
     (select itemcode, 0 as a, 0 as b, quantity as c from c 
    ) 
    ) abc 
group by itemcode; 

Альтернативный доступен в других базах данных full outer join. Однако MySQL не поддерживает этот тип соединения.

EDIT:

Это у вас есть таблица пунктов, а затем использовать left join:

select i.itemcode, a.quantity as a, b.quantity as b, c.quantity as c 
from items i left join 
    a 
    on i.itemcode = a.itemcode left join 
    b 
    on i.itemcode = b.itemcode left join 
    c 
    on i.item_code = c.itemcode; 

Вы можете создать такую ​​таблицу, используя union, если вы действительно хотите:

from (select itemcode from a union select itemcode from b union select itemcode from c 
    i left join 
    . . .