【发布时间】:2018-02-28 22:07:34
【问题描述】:
我有两张表,TableA 和 TableB,
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')
我应该同时使用 NOT IN 和 JOINS,但就是想不到。
【问题讨论】:
标签: sql sql-server join sql-server-2012