我正在尝试将内部和外部联接结合起来但无法使其工作 . 我总共有7个表需要在一个查询中连接在一起 . 首先我只有6并没有问题,因为一切都是内部联接 . 但是现在我已经添加了第七张表并且无法正确使用它 . 我想我需要以某种方式使用OUTER JOIN但不知道如何 . 在这个例子中我只会使用3个表,因为我认为如果你帮助我开始,我可以设法修复其余的表 .
我的 table 清单:
Table1 = dbo.kala(这是我添加的第7个表 .
表2 = dbo.ti
表3 = dbo.ao
SELECT kala.kaldat
From dbo.kala
Where kala.kaldat Between '170407' AND '170410'
以上查询返回以下结果 .
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'
以上查询返回以下结果 .
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个表需要与dbo.ti连接(INNER?) .
2 回答
从
kala
中选择日期,然后选择外部联接ti
,然后选择外部联接ao
.(你必须外连接
ao
,因为如果ti
记录是外部连接的,那么它的aonr
和aopos
是空的 . 如果你内部加入了ao
,你将得不到匹配,从而丢弃结果中的行 . )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