我在MS Access 2010中开发查询时遇到了一些问题。到目前为止我还没能在网上找到解决方案,但我觉得我非常接近。这是我正在尝试做的事情:
问题: 我有一种情况,两个表中的PORT列中的记录可能具有空值。我需要查询返回:
这是我此时使用“LIKE”标准的SQL。我删除了一个数据,我正在尝试测试null,因为我无法让它工作。谢谢你提前帮忙。
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和Port是列:
导入表格
注意:记录2 - 空白端口为空。记录3不匹配,不会出现在查询中。
DONOTDELETE_FPTable
查询的预期结果(两个表与Null之间的匹配记录):
实际查询结果(问题 - 缺少空记录)
记录1:IP:10.1.1.1 / QID:225 /端口:80
记录2:IP:10.1.1.5 / QID:999 /端口:
答案 0 :(得分:1)
使用您添加到问题中的示例数据,我会在Access 2007中获得您使用此查询要求的结果:
SELECT
d.Record_id AS d_id,
d.IP,
d.QID,
d.Port,
i.Record_id AS i_id
FROM
DONOTDELETE_FPExcept AS d
LEFT JOIN Imported AS i
ON (d.QID = i.QID) AND (d.IP = i.IP)
WHERE
d.Port = i.Port
OR (d.Port Is Null AND i.Port Is Null);
如果您没有获得该查询的预期结果,请确认两个表中的“空白”Port
值确实为空。如果Port
是一个文本字段,它可能包含空字符串,空格或非打印字符......任何这些字符都难以通过目视检查与Null区分开来。您可以对每个表运行简单查询以进行检查。
SELECT t.Port, IsNull(t.Port) AS port_is_null
FROM Imported AS t;
在该查询的结果中,-1代表True
,0代表False
。
答案 1 :(得分:1)
这是我提出的问题的解决方案。在测试了不同的场景之后,我发现我从查询中得到了预期的结果。这是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));
让我知道你的想法。再次感谢您的帮助。