带有INNER JOIN的SQL UNION ALL

时间:2011-03-08 16:02:42

标签: sql join view union

我正在寻找显示两个表中所有行的最佳方法,同时首先通过一个字段(dwg)连接,然后在适用的情况下连接第二个连接。

表1数据由原理图(dwg)以及构建图中所示项目所需的零件列表组成。表2包含有关构建原理图所订购的实际零件的数据。 table2中的某些部分是table1中的部分组合(例如:table1中的foo和bar在表2中被命名为foobar)。

我可以使用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  

期望的输出:
目标是创建一个视图,提供table1中所有部分和table2中相关订单的可见性(包括出现在一个而不是另一个表中的那些部分),以便我可以看到table1中的所有绘图部分和相关记录在table2中以及table2中的部分不在table1中的记录。

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 个答案:

答案 0 :(得分:1)

这应该会给你正确的结果:

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

答案 1 :(得分:0)

看起来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