我尝试将内部和外部联接结合起来,但却无法使其发挥作用。我总共有7个表需要在一个查询中连接在一起。 首先我只有6并没有问题,因为一切都是内部联接。但是现在我已经添加了第七张表并且无法正确使用。我想我需要以某种方式使用OUTER JOIN但不知道如何。 在这个例子中我只会使用3个表,因为我认为如果你帮助我开始,我可以设法修复其余的表。
我的桌子清单:
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?)。
答案 0 :(得分:2)
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
答案 1 :(得分:1)
从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
记录是外部加入的,那么其aonr
和aopos
为空。如果您内部加入ao
,您将无法匹配,从而丢弃结果中的行。)