SQL UNION ALL с внутренним соединением - PullRequest
2 голосов
/ 08 марта 2011

Я ищу лучший способ отобразить все строки из двух таблиц, соединяя сначала одно поле (dwg), а затем, где это применимо, 2-е соединение части.

Данные таблицы1 состоят из схем (dwg)вместе со списком деталей, необходимых для сборки предмета, изображенного на чертеже.Таблица 2 состоит из данных о фактических деталях, заказанных для построения схемы.Некоторые части в таблице2 представляют собой комбинацию частей в таблице1 (например, foo и bar в таблице1 были упорядочены как foobar в таблице2).

Я могу отобразить все строки в обеих таблицах с помощью UNION ALL, но это не такобъединить оба поля dwg и part.Я также посмотрел FULL OUTER JOIN, но я не понял, как присоединиться сначала по dwg, а затем по частям.Вот пример данных.

table1                   table2   
dwg        part    qty       order   dwg      part    qty  
-----      -----   -----    -----    -----   -----   -----  
123        foo     1        ord1     123     foobar  1  
123        bar     1        ord1     123     bracket 2  
123        widget  2        ord2     123     screw   4  
123        bracket 4        ord2     123     nut     4  
456        foo     1        ord2     123     widget  2  
                            ord2     123     bracket 2  
                            ord3     456     foo     1  

Требуемый вывод:
Цель состоит в том, чтобы создать представление, которое обеспечивает видимость для всех деталей в таблице1 и связанных заказов в таблице2.(включая те части, которые отображаются в одной, но не в другой таблице), чтобы я мог видеть все детали чертежа в таблице1 и связанные записи в таблице2 вместе с записями в таблице2, где деталь не была в таблице 1.

part_request_order_report  
dwg      part      qty   order   part    qty  
-----    -----     ----- ------  -----   -----  
123      foo       1  
123      bar       1  
123      widget    2     ord2    widget  2  
123      bracket   4     ord1    bracket 2  
123      bracket   4     ord2    bracket 2  
123                      ord1    foobar  1  
123                      ord1    screw   4  
123                      ord1    nut     4  
456      foo       1     ord3    foo     1  

Возможно ли это?Или мне лучше перебирать данные для построения таблицы отчета?Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Это должно дать вам правильный результат:

select
    coalesce(table1.dwg,table2.dwg),
    table1.part,
    table1.qty,
    table2.order,
    table2.part,
    table2.qty,
from table1
full outer join table2 on 
    table1.dwg = table2.dwg and
    table1.part = table2.part
0 голосов
/ 08 марта 2011

Похоже, FULL JOIN - верный путь. Попробуйте это:

SELECT A.dwg, A.part, A.qty, B.order, B.part, B.qty
FROM table1 A
FULL JOIN table2 B
ON A.dwg = B.dwg AND A.part = B.part
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...