Sql 返回两个表中所有值的内部联接
我有两张桌子,表A和表BSql 返回两个表中所有值的内部联接,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
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'