有 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
有 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
您可以使用嵌套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
)
)
你也可以做
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演示
假设您的意思是event与client具有多对多关系,并且event_client是它们之间的桥梁表,那么您应该询问有关跨多对多关系的 SQL 连接的许多其他问题。