2011-04-07 39 views
1

也许有人可以帮助我。 我们有两个表:Mysql:如果从连接表中的条件不匹配,如何仅返回两个表中的主要行?

  • company_projects
  • company_events

一个company_project可能有不同的类型(event_type_id)以上的事件。 如果项目有特殊事件,我想从结果中删除它,即使它有其他事件。

这并不工作:

SELECT cp.id, ce.event_type_id 
FROM companies_projects cp 
LEFT JOIN companies_events ce ON ce.project_id = cp.id 
WHERE ce.event_type_id != 219 
GROUP BY cp.id 

表结构是这样的:

**company_projects** 
id 
project_type_id 
company_id 
... 

**company_events** 
id 
project_id 
event_type_id 
... 

我只想离开的是有一个特殊的情况下,即使有其他活动项目。

回答

0
SELECT cp.id, ce.event_type_id 
    FROM companies_projects cp 
     LEFT JOIN companies_events ce 
      ON ce.project_id = cp.id 
    WHERE NOT EXISTS(SELECT NULL 
         FROM companies_events 
         WHERE project_id = cp.id 
          AND event_type_id = 219) 
1

你需要排除的项目备案,不活动,所以:

SELECT cp.id, ce.event_type_id 
FROM companies_projects cp 
LEFT JOIN companies_events ce ON ce.project_id = cp.id 
WHERE cp.id NOT IN (
    SELECT cp.id FROM companies_projects cp 
    LEFT JOIN companies_events ce ON ce.project_id = cp.id 
    WHERE ce.event_type_id = 219 
) 
GROUP BY cp.id 
+0

就是这样。像一个迷人的工作。谢谢。 – user697097 2011-04-08 07:33:26

相关问题