用内部和外部连接几个表。

joining several tables with inner and outer.

我正在尝试结合内连接和外连接,但无法正常工作。我总共有 7 个 table 需要在一个查询中连接在一起。 首先,我只有 6 个并且没有问题,因为一切都是内部连接。但是现在我已经添加了第七个 table 并且不能正确。我想我需要以某种方式使用 OUTER JOIN 但不知道如何。 在此示例中,我将只使用 3 tables,因为我认为如果您帮助我开始,我可以设法修复其余部分。

我的 table 名单:

表1=dbo.kala(这是我添加的第7个table。

表 2=dbo.ti

表 3=dbo.ao

SELECT kala.kaldat
From dbo.kala
Where kala.kaldat Between '170407' AND '170410'

以上查询returns结果如下。

Result1
|kaldat    |
|2017-04-07|
|2017-04-08|
|2017-04-09|
|2017-04-10|

.

SELECT ti.startdat, ti.artnr, ti.aonr, ti.aopos, ao.prodgr
From dbo.ti
INNER JOIN dbo.ao ON ti.aonr = ao.aonr AND ti.aopos = ao.aopos
Where ti.startdat Between '170407' AND '170410'

以上查询returns结果如下。

Result2
ti.startdat| ti.artnr| ti.aonr|ti.aopos|ao.prodgr|
2017-04-07 | 123     | 0001   |10      |50       |
2017-04-10 | 456     | 0002   |20      |60       |

我要的结果是这个(3)。

Result3
kala.kaldat| ti.artnr| ti.aonr|ti.aopos|ao.prodgr|
2017-04-07 | 123     | 0001   |10      |50       |
2017-04-08 |         |        |        |         |
2017-04-09 |         |        |        |         |
2017-04-10 | 456     | 0002   |20      |60       |

dbo.kala 和 dbo.ti 之间的连接在 kala.kaldat = ti.startdat 上。

希望你们明白我在这里想要表达的意思。如果没有,我会事先道歉,并很乐意尝试更好地解释。提前致谢!

*请注意,此示例中没有的其余 4 个 table 需要与 dbo.ti 连接(INNER?)。

INNER JOIN dbo.ao ON ti.aonr = ao.aonr AND ti.aopos = ao.aopos

您要实现的目标需要使用

LEFT JOIN dbo.ao ON ti.aonr = ao.aonr AND ti.aopos = ao.aopos

Select 从 kala 开始,然后是外部联接 ti,然后是外部联接 ao.

SELECT kala.kaldat, ti.artnr, ti.aonr, ti.aopos, ao.prodgr
FROM dbo.kala
LEFT JOIN dbo.ti ON kala.kaldat = ti.startdat
LEFT JOIN dbo.ao ON ti.aonr = ao.aonr AND ti.aopos = ao.aopos
WHERE kala.kaldat BETWEEN '20170407' AND '20170410';

(你也必须外连接 ao,因为如果 ti 记录是外连接的,那么它的 aonraopos 是空的。如果你inner joined ao,你将得不到匹配项,因此会从结果中丢弃该行。)