【发布时间】:2014-07-29 11:29:19
【问题描述】:
我有一个项目清单,按存款、库存、采购订单、销售订单、消费或生产预测等。我想为每个项目设置一个查询返回给我所有这些信息,存款由订金。显然,并不是说每个项目都有这个信息。
例如,考虑以下表格:
T1
| REF |
|--------|
| 1 |
T2
| REF | DEPOT |
|--------|--------|
| 1 | A |
| 1 | B |
T3
| REF | DEPOT |
|--------|--------|
| 1 | A |
| 1 | C |
T4
| REF | DEPOT |
|--------|--------|
| 1 | B |
| 1 | C |
| 1 | D |
如果我只取前三个表(刚开始),我还没有找到更好的方法:
SELECT T1.ref AS T1ref
, T2.ref AS T2ref, T2.depot AS T2depot
, T3.ref AS T3ref, T3.depot AS T3depot
FROM T1
LEFT JOIN T2
ON T2.ref = T1.ref
FULL JOIN T3
ON T3.ref = T1.ref
AND T3.depot = T2.depot
输出:
| T1REF | T2REF | T2DEPOT | T3REF | T3DEPOT |
|--------|--------|---------|--------|---------|
| 1 | 1 | A | 1 | A |
| 1 | 1 | B | (null) | (null) |
| (null) | (null) | (null) | 1 | C |
我想要什么:
| T1REF | T2REF | T2DEPOT | T3REF | T3DEPOT |
|--------|--------|---------|--------|---------|
| 1 | 1 | A | 1 | A |
| 1 | 1 | B | (null) | (null) |
| 1 | (null) | (null) | 1 | C |
必须有一个干净的方法来做到这一点,但我没有找到任何东西。而且很难找到这方面的资料。
有人有提示吗?
sqlfiddle:http://sqlfiddle.com/#!3/19014/2
谢谢你, 大卫。
编辑:
T4:
| T1REF | T2REF | T2DEPOT | T3REF | T3DEPOT | T4REF | T4DEPOT |
|--------|--------|---------|--------|---------|--------|---------|
| 1 | 1 | A | 1 | A | (null) | (null) |
| 1 | 1 | B | (null) | (null) | 1 | B |
| 1 | (null) | (null) | 1 | C | 1 | C |
| 1 | (null) | (null) | (null) | (null) | 1 | D |
我应该用更好的名称来命名我的表:T1 = 物品,T2 = 库存,T3 = 购买,T4 = 销售。所以,T1 将始终拥有所有的 refs,以及我需要的许多其他信息。
【问题讨论】:
标签: sql sql-server join outer-join