具有两个表的SQL Server内部联接
我有两个表具有两个表的SQL Server内部联接,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有两个表TableA和TableB,如下所示: TableA ItemCode |Qty |BarCode |Brand AC |2 |123 |BRO AB |2 |1234 |BRO AD |2 |1234 |BRO TableB ItemCode |Brand |BarCode |Qty AC
TableA
和TableB
,如下所示:
TableA
ItemCode |Qty |BarCode |Brand
AC |2 |123 |BRO
AB |2 |1234 |BRO
AD |2 |1234 |BRO
TableB
ItemCode |Brand |BarCode |Qty
AC |BRO |123 |1
AB |BRO |1234 |2
我试图得到的结果类似于记录TableA
不等于TableB
的数量,并且TableA
中的记录不在TbleB
ItemCode |Brand |BarCode |Qty
AC |BRO |123 |1
AB |BRO |1234 |2
我尝试过的问题是
SELECT
A.ItemCode AS ItmA, B.ItemCode AS ItmB, A.Qty AS AQty, B.Qty AS BQty
FROM
TableA A
INNER JOIN
TableB B ON A.Brand = B.Brand
WHERE
(A.Qty <> B.Qty)
AND A.ItemCode NOT IN (B.ItemCode)
但是我正在尝试使用ItemCode
AC
和AD
来获得结果,如果您想从TableA
中获取不在TableB
中的记录,那么请考虑左外连接
:
SELECT A.ItemCode AS ItmA,B.ItemCode AS ItmB,A.Qty AS AQty,B.Qty AS BQty
FROM TableA A LEFT JOIN
TableB B
ON A.Brand = B.Brand
WHERE A.Qty <> B.Qty OR B.Brand IS NULL;
但我认为第一个版本接近于您表达规则的方式。我希望您认识到,除了列的顺序之外,表的结构是相同的。一般来说,这在数据库设计中是一个巨大的禁忌。
SELECT A.ItemCode AS ItmA,B.ItemCode AS ItmB,A.Qty AS AQty,B.Qty AS BQty
FROM TableA A LEFT JOIN
TableB B
ON A.Brand = B.Brand AND A.Qty = B.Qty
WHERE B.Brand IS NULL;