2017-09-25 71 views
0

我对这段代码一个小问题:如何使用上存在SQL查询

WITH cps AS 
(
    SELECT 
     cp.id_campaign, ean.equipment 
    FROM 
     tbl_campaign cp 
    INNER JOIN 
     tbl_equip ean ON (cp.id_campaign = ean.id_campaign) 
)  
SELECT 
    COUNT(cp.id_campaign) 
FROM 
    cps cp 
INNER JOIN 
    tbl_camp_associates assoc ON (cp.id_campaign = assoc.id_campaign_associate) 
WHERE 
    EXISTS (SELECT * FROM tbl_already_processed_campaign cal_cp 
      WHERE ID_message = 15 -- campaign processed succeeded 
       AND cp.id_campaign = cal_cp.id_campaign); 

此查询有目的来验证,如果设备在不相关的另一个活动的报酬。

谢谢你们!

编辑:tbl_campaign表有所有关于运动,如ID,设备,日期,WTV的信息。

tbl_equip表它拥有所有有关的设备,ID,IMEI,运动与设备和价格的信息。

tbl_camp_associates表相关的活动。它有一个rowID,广告系列ID和关联广告系列ID。例如:广告系列44有2个关联的广告系列32和33.这导致该表格上的2条记录。

EG。运动44与设备1和2相关的运动(32和33)。成功!并将其放在桌子上tbl_already_processed_campaign处理与正确的消息(id_message = 15)

EG2:运动45与所述设备1和相关联的运动(30和31)它必须返回一个错误,因为它是在运动44报酬与不同的相关活动。

+0

你需要什么?只是发布你目前拥有的是不够的。 –

+0

@VamsiPrabhala我需要检查设备是否在不相关的活动报酬。我不知道我是否清楚。 – Wiz

+2

提供样本数据,所需结果以及您想要执行的操作的明确说明。 –

回答

0

EXISTS条件与子查询结合使用,并且如果子查询返回至少一行,则认为满足条件。在这种情况下,如果子查询

select * from tbl_already_processed_campaign cal_cp where ID_message = 15 AND cp.id_campaign= cal_cp.id_campaign 

返回至少一行,EXISTS子句将评估为true并满足条件。

+1

'一个技巧是避免EXISTS条件每当possible'这是以偏概全 – lad2025

+0

'EXISTS'比联接得更好,为空 – dbajtr

+1

我同意@ lad2025,@dbajtr! – Madhukar