问题描述
这个真的把我难住了
查询 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>