2013-10-28 25 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

这是一个非常可读的声明,谢谢 –

相关问题