首页 文章

连接内部和外部的几个表 .

提问于
浏览
1

我正在尝试将内部和外部联接结合起来但无法使其工作 . 我总共有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 回答

  • 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 记录是外部连接的,那么它的 aonraopos 是空的 . 如果你内部加入了 ao ,你将得不到匹配,从而丢弃结果中的行 . )

  • 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

相关问题