有3个表:events,eventClients和clients。
编写一个查询,查找所有客户都有权访问的事件?
内部联接并不保证表中的所有行都参与,因此这没有帮助:
select * from events e
inner join eventclients ec on e.id = ec.eventid
inner join clients c on etc.clientid = c.id
答案 0 :(得分: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
)
)
答案 1 :(得分: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 演示
答案 2 :(得分:0)
假设您的意思是事件与客户端有多对多的关系, event_client 是它们之间的桥接表,那么你是否有任何其他问题要求跨多对多关系进行SQL连接。