Sql 返回两个表中所有值的内部联接

Sql 返回两个表中所有值的内部联接,sql,sql-server,join,sql-server-2012,Sql,Sql Server,Join,Sql Server 2012,我有两张桌子,表A和表B TableA ------------------------------------------------- Date ORDERNUMBER PARTNUMBER ID -------------------------------------------------------- 2017-08-16 ORD001 PART001 1 2017-08-16 ORD002 PART002 2

我有两张桌子,表A和表B

TableA
-------------------------------------------------
Date        ORDERNUMBER PARTNUMBER  ID
--------------------------------------------------------
2017-08-16  ORD001      PART001     1         
2017-08-16  ORD002      PART002     2         
2017-08-16  ORD003      PART003     3         
2017-08-16  ORD004      PART003     4   


TableB
--------------------------------------------------------------------
Date        ORDERNUMBER PARTNUMBER  ID       PARTTYPE
---------------------------------------------------------------------
2017-08-16  ORD006      PART006     6           BAG
2017-08-16  ORD007      PART007     7           BAG
2017-08-16  ORD008      PART008     8           BAG
2017-08-16  ORD009      PART009     9           PACK
2017-08-16  ORD0010     PART0010    10          PACK
现在我想从TableB中获取值,其中OrderNumber不在TableA中,PARTTYPE为“PACK”

为了做到这一点,我尝试进行内部连接,但这会带来以下结果

SELECT * 
FROM TableA A
INNER JOIN TableB B WIT(NOLOCK) ON A.ORDERNUMBER != B.ORDERNUMBER 
                                AND B.PARTTYPE = 'PACK'
WHERE A.Date = '16 AUG 2017'
连接的结果就是一切:

Date        ORDERNUMBER PARTNUMBER  ID      Date        ORDERNUMBER PARTNUMBER  ID      PARTTYPE
----------------------------------------------------------------------------------------------------------------------------------------------
2017-08-16  ORD001      PART001     1           2017-08-16O RD009       PART009     9           PACK
2017-08-16  ORD002      PART002     2           2017-08-16O RD009       PART009     9           PACK
2017-08-16  ORD003      PART003     3           2017-08-16O RD009       PART009     9           PACK
2017-08-16  ORD004      PART003     4           2017-08-16O RD009       PART009     9           PACK
2017-08-16  ORD001      PART001     1           2017-08-16O RD0010      PART0010    10          PACK
2017-08-16  ORD002      PART002     2           2017-08-16O RD0010      PART0010    10          PACK
2017-08-16  ORD003      PART003     3           2017-08-16O RD0010      PART0010    10          PACK
2017-08-16  ORD004      PART003     4           2017-08-16O RD0010      PART0010    10          PACK
我还尝试了子查询,但我知道这是错误的:

SELECT * 
FROM TableA 
WHERE ORDERNUMBER NOT IN (SELECT ORDERNUMBER 
                          FROM TableB 
                          WHERE PARTTYPE = 'PACK')
我应该用不在和连接在一起,但就是想不起来

我想从TableB中获取值,其中OrderNumber不在TableA中,PARTTYPE为“PACK”

这基本上似乎相当基本,但不存在:

我想从TableB中获取值,其中OrderNumber不在TableA中,PARTTYPE为“PACK”

这基本上似乎相当基本,但不存在:


您也可以在此处进行左连接:

SELECT b.*
FROM TableB b
LEFT JOIN TableA a
    ON a.ordernumber = b.ordernumber
WHERE
    a.ordernumber IS NULL AND
    b.parttype = 'PACK'

您也可以在此处进行左连接:

SELECT b.*
FROM TableB b
LEFT JOIN TableA a
    ON a.ordernumber = b.ordernumber
WHERE
    a.ordernumber IS NULL AND
    b.parttype = 'PACK'