Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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 MS Access 2016左联接创建重复记录_Sql_Ms Access_Left Join_Ms Access 2016 - Fatal编程技术网

Sql MS Access 2016左联接创建重复记录

Sql MS Access 2016左联接创建重复记录,sql,ms-access,left-join,ms-access-2016,Sql,Ms Access,Left Join,Ms Access 2016,我是MS Access的新手,需要将表2中的“组名”字段添加到表1中(见下文) 表1列出了所有发票行项目交易记录。表2按位置和船长列出了定价类别。表2中的组名字段必须与表1中的位置代码匹配,表1中的船长度必须介于表2中的最小和最大长度之间 我创建了一个带有左连接的查询,并使用表达式生成器确保拉入表1的组名满足表2中的长度要求 SELECT q_Step2_AMR.*, IIf( [HS Boat Length]<=[t_BLG]![Max] And [H

我是MS Access的新手,需要将表2中的“组名”字段添加到表1中(见下文)

表1列出了所有发票行项目交易记录。表2按位置和船长列出了定价类别。表2中的组名字段必须与表1中的位置代码匹配,表1中的船长度必须介于表2中的最小和最大长度之间

我创建了一个带有左连接的查询,并使用表达式生成器确保拉入表1的组名满足表2中的长度要求

SELECT 
    q_Step2_AMR.*, 
    IIf(
        [HS Boat Length]<=[t_BLG]![Max] And [HS Boat Length]>=[t_BLG]![Min],
        [t_BLG]![Group Name],
        "test"
    ) AS [Local Boat Length Group] 
FROM q_Step2_AMR 
LEFT JOIN t_BLG ON q_Step2_AMR.[Location Code] = t_BLG.[Location Code]
选择
q_Step2_AMR.*,
IIf(
[HS船长]=[t_BLG]![Min],
[t_BLG]![Group Name],
“测试”
)AS[本地船长组]
从q_步骤2_AMR
在q_Step2_AMR上左连接t_BLG。[位置代码]=t_BLG。[位置代码]
问题在于,每当表2中的位置代码与表1中的记录中的位置代码相匹配时,它就会为表1中的每个记录创建重复的记录


查询结果是由于记录的笛卡尔关系。使用WHERE子句:

SELECT q_Step2_AMR.*, t_BLG.[Group Name]
FROM q_Step2_AMR 
LEFT JOIN t_BLG ON q_Step2_AMR.[Location Code] = t_BLG.[Location Code]
WHERE [HS Boat Length] BETWEEN [Min] AND [Max];
请注意,对于大型数据集,涉及笛卡尔关系的查询可能执行缓慢


强烈建议不要使用保留字,如Min和Max作为任何名称。最好不要在命名约定中使用空格。

请以文本(而不是图像)的形式向我们显示您当前的查询。我想这就是您要查找的内容。在我前面的示例中,查询q_Step2_AMR是表1,而t_BLG是表2。我试图使用Access函数而不是SQL来解决这个问题。选择q_Step2_AMR.*,IIf([HS Boat Length]=[t_BLG]![Min],[t_BLG]![Group Name],“test”)作为q_Step2_AMR左侧的[Local Boat Length Group]在q_Step2_AMR上加入t_BLG。[位置代码]=t_BLG。[位置代码];请添加此重要信息。您似乎想“对齐”行。在MS Access中,这不是一项容易的任务。你可能想考虑切换到一个更全面的数据库…谢谢你的帮助!结果查询最初缺少记录,其中boat length字段为空,但我找到了一个解决方法。如果字段为null,可以使用Nz()或IIf()函数提供一个值,如0。如果回答解决了问题,请标记接受。