来自多个表的SQL查询显示所有记录

时间:2018-07-24 12:00:42

标签: sql ms-access

请针对我在以下查询中做错的事情为我提供建议

场景:

数据在三个表中,一个表包含完整的记录,另外两个表缺少记录,我想基于表A(其中所有记录都存在)进行查询,而另外两个表则像excel(index match)问题是它正在正确过滤数据,但仅显示所有数据在所有三个表中都匹配的那些记录,我希望查询显示数据,即使仅在一个表中也可用。

我到目前为止生成的查询:

SELECT primaryitemtable.itemcode, 
       primaryitemtable.itemdescription, 
       primaryitemtable.article, 
       itembatchlist.batchno, 
       Sum(tempscmstock.qty)    AS SumOfQty, 
       Sum(stockmastertemp.qty) AS SumOfQty1, 
       tempscmstock.batch, 
       stockmastertemp.batch 
FROM   (stockmastertemp 
        INNER JOIN (tempscmstock 
                    INNER JOIN primaryitemtable 
                            ON tempscmstock.itemcode = 
                   primaryitemtable.itemcode) 
                ON ( stockmastertemp.itemcode = primaryitemtable.itemcode ) 
                   AND ( stockmastertemp.itemcode = primaryitemtable.itemcode )) 
       INNER JOIN itembatchlist 
               ON primaryitemtable.itemcode = itembatchlist.itemcode 
GROUP  BY primaryitemtable.itemcode, 
          primaryitemtable.itemdescription, 
          primaryitemtable.article, 
          itembatchlist.batchno, 
          tempscmstock.batch, 
          stockmastertemp.batch 
HAVING ( ( ( tempscmstock.batch ) = [itembatchlist] ! [batchno] ) 
         AND ( ( stockmastertemp.batch ) = [itembatchlist] ! [batchno] ) ) 
ORDER  BY primaryitemtable.itemcode;  

[enter image description here]

1 个答案:

答案 0 :(得分:0)

尝试左联接,因为内部联接仅返回每个表具有相同数据的记录

SELECT primaryitemtable.itemcode, 
       primaryitemtable.itemdescription, 
       primaryitemtable.article, 
       itembatchlist.batchno, 
       Sum(tempscmstock.qty)    AS SumOfQty, 
       Sum(stockmastertemp.qty) AS SumOfQty1, 
       tempscmstock.batch, 
       stockmastertemp.batch 
FROM   (stockmastertemp 
        LEFT JOIN (tempscmstock 
                   LEFT JOIN primaryitemtable 
                          ON tempscmstock.itemcode = primaryitemtable.itemcode) 
               ON ( stockmastertemp.itemcode = primaryitemtable.itemcode ) 
                  AND ( stockmastertemp.itemcode = primaryitemtable.itemcode )) 
       LEFT JOIN itembatchlist 
              ON primaryitemtable.itemcode = itembatchlist.itemcode 
GROUP  BY primaryitemtable.itemcode, 
          primaryitemtable.itemdescription, 
          primaryitemtable.article, 
          itembatchlist.batchno, 
          tempscmstock.batch, 
          stockmastertemp.batch 
HAVING ( ( ( tempscmstock.batch ) = [itembatchlist] ! [batchno] ) 
         AND ( ( stockmastertemp.batch ) = [itembatchlist] ! [batchno] ) ) 
ORDER  BY primaryitemtable.itemcode