首页 > 解决方案 > Coldfusion Query OF Query 生成的记录多于预期

问题描述

这个真的难倒我

我有 3 个查询

查询一:

使用一系列 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>         

标签: coldfusioncoldfusion-9

解决方案


在没有看到您的数据或您的数据库服务器类型的情况下,我仍然相信这是由于查询的 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> 

推荐阅读