MySQL:找不到匹配的记录(JOIN / IS为NULL)

时间:2014-01-15 19:55:37

标签: mysql

我正在尝试为这些简化的MySQL表构建查询:

==campaigns==  
id  
content  

==lists==  
id  
name  

==subscriptions==  
id  
list_id   
subscriber_id  

==events==  
id  
campaign_id
list_id
subscription_id

==triggers==
id
campaign_id
list_id
time_to_send

我想找到所有订阅的subscription_id,而没有针对某个campaign_id的相应事件。

此查询返回没有事件的所有订阅:

SELECT * FROM subscriptions AS s LEFT JOIN events AS e ON s.id = e.subscription_id WHERE e.subscription_id IS NULL

但是,我想要返回所有订阅没有特定广告系列的活动没有特定触发器的事件

我该怎么做?

1 个答案:

答案 0 :(得分:0)

  

但是,我希望在没有针对特定广告系列的活动的情况下返回所有订阅

由于订阅和广告系列之间的关系由事件定义 ,因此这是不可能的。

  

因此,我们发送了广告系列#1的活动表中可能有一个条目,但我们想知道此订阅是否曾经发送过广告系列#2

如果您想要识别与广告系列#1相关但不识别广告系列#2的订阅,那么这就是完全不同的问题....

SELECT s.*
FROM subscriptions s
INNER JOIN events e
  ON s.id=e.subscription_id
INNER JOIN campaigns c
  ON e.campaign_id=c.id
WHERE c.content='campaign #1'
AND NOT EXISTS (
   SELECT 1
   FROM events e2
   INNER JOIN capaigns c2
     ON e2.campaign_id=c2.id
   WHERE c2.content='campaign #2'
   AND e2.subscription_id=e.subscription_id
);