Ms access 在两个表之间查询以查找包含空值的相似记录
我在MS Access 2010中开发查询时遇到了一些问题。到目前为止,我还没有在网上找到解决方案,但我觉得我真的很接近了。以下是我想做的: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的左连接设置 问题: 我
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/端口:
- 记录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/端口:
选择
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
查询,还删除了内部连接建议。可以。有什么方法可以帮我给你积分吗?再次感谢你,我希望有一天我能帮助你。不客气,乔姆。请不要替我担心积分问题。