如何才能真正加入示例?

bel*_*eed 1 sql-server join self-join outer-join sql-server-2008

我有以下查询,但没有给出预期的结果:

SELECT "invoice"."ITEMNO", 
  "invoice"."Outgoing", 
  "storeage"."incoming" 
FROM   "MVXJDTAP"."MVXJDTA"."invoice" 
INNER JOIN "MVXJDTAP"."MVXJDTA"."storeage " 
  ON "invoice"."ITEMNO" = "storeage"."itemno"
ORDER BY"storeage"."itemno"

Tables:
invoice
itemno       Outgoing
ZOMV3-94        4 
ZOMV3-94        7 

storeage
itemno      incoming
ZOMV3-94    3
ZOMV3-94    1
ZOMV3-94    60
ZOMV3-94    5 
Run Code Online (Sandbox Code Playgroud)

查询给出了结果:

itemno      outgoing      incoming
ZOMV3-94       4             3
ZOMV3-94       4             1
ZOMV3-94       4             60
ZOMV3-94       4             5
ZOMV3-94       7             3
ZOMV3-94       7             1 
ZOMV3-94       7             60
ZOMV3-94       7             5
Run Code Online (Sandbox Code Playgroud)

但我希望得到以下真实结果:

ZOMV3-94       4           NULL OR 0
ZOMV3-94       7           NULL OR 0
ZOMV3-94     NULL OR 0       3
ZOMV3-94     NULL OR 0       1
ZOMV3-94     NULL OR 0       60
ZOMV3-94     NULL OR 0       5 
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这个结果?

Tar*_*ryn 7

您可以使用a UNION ALL而不是a JOIN来获取结果:

select itemno,
  outgoing,
  null as incoming
from invoice
union all
select itemno,
  null,
  incoming
from storeage;
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo.这给出了一个结果:

|   ITEMNO | OUTGOING | INCOMING |
----------------------------------
| ZOMV3-94 |        4 |   (null) |
| ZOMV3-94 |        7 |   (null) |
| ZOMV3-94 |   (null) |        3 |
| ZOMV3-94 |   (null) |        1 |
| ZOMV3-94 |   (null) |       60 |
| ZOMV3-94 |   (null) |        5 |
Run Code Online (Sandbox Code Playgroud)