2015-11-20 116 views
1

我有下面的SQL脚本。这非常简单,不幸的是只有where子句决定显示哪些广告系列正在运行。SQL WHERE子句不起作用

SELECT 
    a.id, 
    a.leadid, 
    a.campaign_name__c, 
    cast(a.firstrespondeddate as date), 
    b.status, 
    cast(b.createddate as date), 
    b.ownerid 
FROM rjm_current.sf_campaignmember a 
    LEFT JOIN rjm_current.sf_lead b ON a.leadid = b.id 
WHERE a.campaign_name__c LIKE '%demo%' OR a.campaign_name__c LIKE '%contact%' 
    AND cast(a.firstrespondeddate as date) <> '7/14/2015' 
    AND b.status = 'New' 
    AND a.contactid IS NULL 
    AND a.leadid IS NOT NULL 

任何帮助非常感谢。在另一个查询中,我必须将firstrespondeddate转换为一个表中的日期,并使用另一个表来表示firstrespondeddate <> '7/15/2015',但它应该不需要创建一堆表。

回答

1

OR表达应该放在括号:

WHERE (a.campaign_name__c like '%demo%' OR a.campaign_name__c like '%contact%') 
and cast(a.firstrespondeddate as date) <> '7/14/2015' 
and b.status = 'New' 
and a.contactid is null 
and a.leadid is not null 

Operator Precedence

+0

谢谢!还有一个问题:在下面的查询中,我正在进行左连接,但为我要加入的表获取多个记录。足够奇怪的是,在我对表进行左连接之后还有更多记录。 – Berra2k

+0

创建表temp.overlord_responses3如( 选择 a.lead_contact_id, a.responded_date, a.created_date, a.member_type, a.campaign, 铸造(b.createddate如日期)作为activity_date, 湾受试者 从temp.overlord_responses2一个 LEFT JOIN rjm_current.sf_task b关于a.lead_contact_id = b.whoid 其中(b.createddate Berra2k

+0

这从加入的感觉和结果是很自然的。 – klin