SQL Server INNER JOIN有两个表

时间:2014-04-20 15:25:12

标签: sql sql-server-2008-r2

我有两张表TableATableB,如下所示:

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

的结果

我试过的查询是

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)

我得到这样的结果

ItmA   |ItmB   |AQty   |BQty
--------------------------------
AB     | AC    |  2    |  1
AD     | AC    |  2    |  1

但我想通过ItemCode ACAD

来获得结果

1 个答案:

答案 0 :(得分:1)

如果您想从TableA获取不属于TableB的记录,请考虑LEFT OUTER JOIN

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;

但我认为第一个版本接近于你如何表达规则。