访问语法问题:多个内部联接会导致记录号减少

时间:2015-11-13 08:05:11

标签: sql ms-access ms-access-2010 inner-join

我的问题是我想查询多个表,但是我增加内连接数,结果记录数减少。

SELECT DISTINCT Daily_Output20151013.[Lot No], atabla.[Outgoing date]        
AS [ext(1)time], btabla.[Outgoing date] 

FROM ((((((Daily_Output20151013 

INNER JOIN (SELECT [Lot no], [Outgoing date] FROM Daily_Output20151013 
WHERE ((mid(Daily_Output20151013.[Process Pattern],4,1) = 'S')) 
    and (mid(Daily_Output20151013.[Process Pattern],5,1)='T') 
    and (mid(Daily_Output20151013.[Process Pattern],6,1)='R') 
    and (mid(Daily_Output20151013.[Process Pattern],8,1)='1'))  AS atabla ON Daily_Output20151013.[Lot No] = atabla.[Lot No]) 

INNER JOIN (SELECT [Lot no], [Outgoing date] FROM Daily_Output20151013 
WHERE ((mid(Daily_Output20151013.[Process Pattern],4,1) = 'P')) 
    and (mid(Daily_Output20151013.[Process Pattern],5,1)='L') 
    and (mid(Daily_Output20151013.[Process Pattern],6,1)='G') 
    and (mid(Daily_Output20151013.[Process Pattern],8,1)='1'))  AS btabla ON Daily_Output20151013.[Lot No] = btabla.[Lot No]) 

这是代码中的一点摘录。出现缩减问题,因为有时这些字段不包含任何数据,我认为,Access不会显示任何错过至少一个数据的记录。

我的问题是如何解决该问题并显示所有数据

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您需要使用LEFT JOIN而不是INNER JOIN,这将返回左表(Daily_Output20151013)的所有记录以及已加入子查询的匹配记录。

注意:如果您在查询中有许多LEFT JOIN,性能可能会受到影响。可能需要将子查询(atabla,btabla)保存为命名查询并改为使用它们。