我正在寻找显示两个表中所有行的最佳方法,同时首先通过一个字段(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
这可能吗?或者我最好迭代数据来构建报告表?提前谢谢。
答案 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