2010-08-31 84 views
1

我在我的MySQL數據庫中有兩個表 - 一個包含航班,另一個包含票據。航班和機票之間的關係是一對多的。我想刪除所有沒有車票或取消的航班。如何用一條SQL語句來做到這一點。如何從一個表中選擇不具有某些屬性的連接元素的Db元素

我現在擁有的一切:

M('Db')->exec(' 
    DELETE 
     f 
    FROM 
     flight f 
    LEFT JOIN 
     ticket p 

    ON 
     f.session_id = p.flight_session_id AND 
     f.id = p.flight_id 

    WHERE 
     f.cdate < ? AND 
     (p.is_canceled =1 OR p.id IS NULL) 
    ', $this->getSweepTime()); 

此語句不帳戶航班承擔其同時存在取消,不取消門票。所以我應該糾正它,但我不知道如何在一個聲明中這樣做。

回答

1
DELETE FROM Flight f 
WHERE f.cdate < ? 
     AND 
     (NOT EXISTS (SELECT 1 
        FROM ticket t 
        WHERE f.session_id = p.flight_session_id 
          AND f.id = p.flight_id) OR EXISTS 
     (SELECT 1 
     FROM ticket t 
     WHERE f.session_id = t.flight_session_id 
       AND f.id = t.flight_id HAVING 
      SUM(Canceled) - COUNT(*) = 0)) 
相關問題