Coldfusion Query OF Query 生成比预期更多的记录

问题描述

这个真的把我难住了

我有 3 个查询

查询 1:

使用一系列 where 语句完成查询

查询 2 是查询 1(减去所有 where 语句),因为我决定创建一个或多个查询

查询 3 是查询查询,它在 from 语句中引用查询 2,然后使用 where 语句过滤从查询 2 收到的结果

我希望查询 1 和 3 的结果相同,但查询查询输出的记录比查询 1 多近 1500 条

任何建议建议为什么请启发我

<CFQUERY datasource="#Application.Workflow#" name="query1">
SELECT 
                * 
FROM
                Campaigns
INNER JOIN         
                CampaignReceipients
ON
                Campaigns.CampaignId=CampaignReceipients.CampaignId
WHERE
                Campaigns.CampaignId  = 191
AND
                ClientMobilePhone <> ''
AND
                ClientEmailAddress like '%@%'
AND
                ClientBusinessPhone is null 
AND
                ClientHomePhone is null 
AND 
                AssignedToDate is null
</CFQUERY>      
                
<CFQUERY datasource="#Application.Workflow#" name="query2">
SELECT 
                * 
FROM
                Campaigns
INNER JOIN         
                CampaignReceipients
ON
                Campaigns.CampaignId=CampaignReceipients.CampaignId
WHERE
                Campaigns.CampaignId  = 191
</CFQUERY>
                
<cfquery dbtype="query" name="query3">
SELECT 
                *
FROM
                query2
WHERE 
                ClientMobilePhone <> ''
AND
                ClientEmailAddress like '%@%'
AND
                ClientBusinessPhone is null 
AND
                ClientHomePhone is null 
AND 
                AssignedToDate is null
</cfquery>         

解决方法

在没有看到您的数据或您的数据库服务器类型的情况下,我仍然相信这是由于查询的 CF 查询如何处理字符串比较中的 NULL 值。

对于您的原始数据源级别查询,比较 WHERE ClientMobilePhone <> '' 将忽略所有记录 WHERE ClientMobilePhone IS NULL

对于 CF QoQ,WHERE ClientMobilePhone <> '' 将返回 ClientMobilePhone 为 NULL 或非空字符串的记录。

此处不支持SQL ISNULL() / IFNULL(),但可以单独测试NULL;您可以通过向问题中的代码添加第四个查询来确认这是否确实发生了:

<cfquery dbtype="query" name="query4">
SELECT 
                *
FROM
                query2
WHERE 
                ClientMobilePhone <> '' AND ClientMobilePhone IS NOT NULL
AND
                ClientEmailAddress like '%@%'
AND
                ClientBusinessPhone is null 
AND
                ClientHomePhone is null 
AND 
                AssignedToDate is null
</cfquery>