如何使用SQL Query上存在

时间:2017-09-25 14:08:43

标签: sql oracle11g

我对这段代码提出了一个小问题:

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,设备,日期,重量。

tbl_equip表格中包含有关设备,身份证,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中使用不同的相关广告系列获得报酬。

1 个答案:

答案 0 :(得分:0)

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

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

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