Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有两个表的SQL Server内部联接_Sql_Sql Server 2008 R2 - Fatal编程技术网

具有两个表的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;