Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
Ms access 在两个表之间查询以查找包含空值的相似记录_Ms Access_Null_Ms Access 2010 - Fatal编程技术网

Ms access 在两个表之间查询以查找包含空值的相似记录

Ms access 在两个表之间查询以查找包含空值的相似记录,ms-access,null,ms-access-2010,Ms Access,Null,Ms Access 2010,我在MS Access 2010中开发查询时遇到了一些问题。到目前为止,我还没有在网上找到解决方案,但我觉得我真的很接近了。以下是我想做的: 我有两个表格,我正试图比较,并找到类似的项目。表A称为“DONOTDELETE_FPTable”。表B称为“进口” 我正在比较两个表中的相同列。IP、QID和端口 我的目标是在导入的表中查找DoNotDeleteFPU表中出现的相似记录 我在上面提到的所有列上都有一个从DONOTDELETE_FPTable到Import table的左连接设置 问题: 我

我在MS Access 2010中开发查询时遇到了一些问题。到目前为止,我还没有在网上找到解决方案,但我觉得我真的很接近了。以下是我想做的:

  • 我有两个表格,我正试图比较,并找到类似的项目。表A称为“DONOTDELETE_FPTable”。表B称为“进口”
  • 我正在比较两个表中的相同列。IP、QID和端口
  • 我的目标是在导入的表中查找DoNotDeleteFPU表中出现的相似记录
  • 我在上面提到的所有列上都有一个从DONOTDELETE_FPTable到Import table的左连接设置
  • 问题: 我遇到了这样一种情况:两个表中的列端口中的记录可能都有空值。我需要查询返回:

  • 在所有列中具有相同数据的两个表之间的所有匹配记录
  • 以及在两个表之间的端口列中具有匹配IP、QID和可能的null的任何匹配记录
  • 这里是我在这里使用“LIKE”标准得到的SQL。我删除了一个我试图测试空值的数据,因为我无法让它工作。提前谢谢你的帮助

    SQL语句:

    SELECT DONOTDELETE_FPExcept.*
    FROM
        DONOTDELETE_FPExcept
        LEFT JOIN Imported
        ON
                (DONOTDELETE_FPExcept.Port = Imported.PORT)
            AND (DONOTDELETE_FPExcept.QID = Imported.QID)
            AND (DONOTDELETE_FPExcept.IP = Imported.IP)
    WHERE
            (((Imported.IP) Like [DONOTDELETE_FPExcept].[ip])
        AND ((Imported.qid) Like [DONOTDELETE_FPExcept].[QID])
        AND ((Imported.PORT) Like [DONOTDELETE_FPExcept].[Port]));
    
    以下是表中的一些示例数据。IP、QID和端口是列:

    SELECT DONOTDELETE_FPExcept.*
    FROM
        DONOTDELETE_FPExcept
        LEFT JOIN Imported
        ON
                (DONOTDELETE_FPExcept.Port = Imported.PORT)
            AND (DONOTDELETE_FPExcept.QID = Imported.QID)
            AND (DONOTDELETE_FPExcept.IP = Imported.IP)
    WHERE
            (((Imported.IP) Like [DONOTDELETE_FPExcept].[ip])
        AND ((Imported.qid) Like [DONOTDELETE_FPExcept].[QID])
        AND ((Imported.PORT) Like [DONOTDELETE_FPExcept].[Port]));
    
    导入表:

    SELECT DONOTDELETE_FPExcept.*
    FROM
        DONOTDELETE_FPExcept
        LEFT JOIN Imported
        ON
                (DONOTDELETE_FPExcept.Port = Imported.PORT)
            AND (DONOTDELETE_FPExcept.QID = Imported.QID)
            AND (DONOTDELETE_FPExcept.IP = Imported.IP)
    WHERE
            (((Imported.IP) Like [DONOTDELETE_FPExcept].[ip])
        AND ((Imported.qid) Like [DONOTDELETE_FPExcept].[QID])
        AND ((Imported.PORT) Like [DONOTDELETE_FPExcept].[Port]));
    
    • 记录1:IP:10.1.1.1/QID:225/端口:80
    • 记录2:IP:10.1.1.1/QID:111/端口:
    • 记录3:IP:10.1.1.5/QID:999/端口:8080
    • 记录4:IP:10.1.1.5/QID:999/端口:
    注意:记录2-空白端口为空。记录3不应匹配且不出现在查询中

    不要删除表格

    • 记录1:IP:10.1.1.1/QID:225/端口:80
    • 记录2:IP:10.1.1.1/QID:111/端口:
    查询的预期结果(在两个空表之间匹配记录):

    SELECT DONOTDELETE_FPExcept.*
    FROM
        DONOTDELETE_FPExcept
        LEFT JOIN Imported
        ON
                (DONOTDELETE_FPExcept.Port = Imported.PORT)
            AND (DONOTDELETE_FPExcept.QID = Imported.QID)
            AND (DONOTDELETE_FPExcept.IP = Imported.IP)
    WHERE
            (((Imported.IP) Like [DONOTDELETE_FPExcept].[ip])
        AND ((Imported.qid) Like [DONOTDELETE_FPExcept].[QID])
        AND ((Imported.PORT) Like [DONOTDELETE_FPExcept].[Port]));
    
    • 记录1:IP:10.1.1.1/QID:225/端口:80
    • 记录2:IP:10.1.1.1/QID:111/端口:
    实际查询结果(问题-缺少空记录)

    • 记录1:IP:10.1.1.1/QID:225/端口:80

    • 记录2:IP:10.1.1.5/QID:999/端口:


    根据您添加到问题中的示例数据,我在Access 2007中获得了您要求的查询结果:

    选择
    d、 将_id记录为d_id,
    d、 知识产权,
    d、 QID,
    d、 港口,
    i、 将\u id记录为i\u id
    从…起
    请勿删除首字母FPD,除非是d
    左连接导入为i
    开(d.QID=i.QID)和(d.IP=i.IP)
    哪里
    d、 端口=i.端口
    或(d.端口为空,i.端口为空);
    
    如果该查询没有得到预期的结果,请确认两个表中的“blank”
    Port
    值均为空。如果
    Port
    是一个文本字段,它可能包含空字符串、空格或非打印字符。。。通过目视检查,很难区分其中任何一种。您可以对每个要检查的表运行一个简单的查询

    选择t.Port,IsNull(t.Port)作为端口
    从作为t进口;
    

    在该查询的结果中,-1表示
    True
    ,0表示
    False

    以下是我提出的问题的解决方案。在测试了不同的场景之后,我发现我从查询中得到了预期的结果。以下是MS Access 2010查询。请注意,MS Access添加了额外的标点符号,我相信这是我的原始版本:

    MS Access中的SQL代码:

    SELECT Imported.ip, Imported.qid, Imported.port
    
    FROM
    
    DONOTDELETE_FPExcept 
    LEFT JOIN Imported 
    ON 
         (DONOTDELETE_FPExcept.QID = Imported.QID) 
         AND (DONOTDELETE_FPExcept.IP = Imported.IP)
    
    WHERE 
         (((Imported.ip)=DONOTDELETE_FPExcept.IP)       And  
         (Imported.qid)=DONOTDELETE_FPExcept.qid)       And
         ((Imported.port)=DONOTDELETE_FPExcept.Port))   Or 
         (((Imported.port) Is Null)                     And 
         ((DONOTDELETE_FPExcept.port) Is Null));
    

    让我知道你的想法。再次感谢您的帮助。

    如果您能正确格式化SQL语句,那就太好了。很抱歉,路易斯。谢谢你的帮助。谢谢你的快速回答。让我看看这个,试试看。不幸的是,它不起作用。我仍然有上面列出的问题。似乎MS Access 2010在使用查询设计GUI时添加了多余的()[]。我没有添加额外的数据。不过,您上面的解决方案给了我一些新的想法,所以我将尝试一些不同的方法。我在问题中对上面的内容进行了编辑,以包含您询问的表格数据。无论我如何看待这个问题,我仍然会遇到它。再次感谢你的帮助。谢谢大家的意见。这帮了大忙。让我来处理一下,我会给你回复的。祝你有一个愉快的夜晚或一天,这取决于你来自哪里。不客气。请注意,我刚刚修复了
    IsNull
    查询,还删除了
    内部连接建议。可以。有什么方法可以帮我给你积分吗?再次感谢你,我希望有一天我能帮助你。不客气,乔姆。请不要替我担心积分问题。