2013-10-28 26 views

回答

3

您可以使用嵌套NOT EXISTS進行檢查:

SELECT e.* 
FROM events e 
WHERE NOT EXISTS(
    SELECT 1 FROM client c 
    WHERE NOT EXISTS(
     SELECT 1 FROM eventclients ec 
     WHERE ec.eventid = e.id AND c.id= ec.clientid 
    ) 
) 

Demo

+0

感謝,你能解釋一下它做什麼? –

+0

@TheLight:它返回所有可用客戶端在具有給定'eventid'的eventclient中的所有事件。由於雙重否定,這有點令人困惑。注意:「NOT EXISTS」是有效的,並沒有像其他方法那樣的陷阱(可空列)。看看:http://www.sqlperformance.com/2012/12/t-sql-queries/left-anti-semi-join –

1

你也可以做

SELECT e.id, e.name 
    FROM events e LEFT JOIN eventclients ec 
    ON e.id = ec.eventid LEFT JOIN clients c 
    ON ec.clientid = c.id 
GROUP BY e.id, e.name 
HAVING COUNT(ec.clientid) = 
(
    SELECT COUNT(*) FROM clients 
) 

這裏是SQLFiddle演示

+0

這是一個非常可讀的聲明,謝謝 –

相關問題