mysql在对组数据进行细分时出现问题
我有三张桌子 成员(成员ID,m_名称,状态ID,地址,DOB,电话) 预订(预订ID、会员ID、会话ID、成本) 会话(会话ID,活动,位置) (fk memberid,fk sessionid)预订链接到(会员主键)和(会话主键) 课时活动像足球、游泳、羽毛球、网球 我想运行以下查询 查找在2009年12月期间预订了“足球”课程,但没有预订“游泳”课程的所有会员的姓名 sql 我做错了什么?它让我想起了一个有书《足球》和《游泳》的人mysql在对组数据进行细分时出现问题,mysql,database,Mysql,Database,我有三张桌子 成员(成员ID,m_名称,状态ID,地址,DOB,电话) 预订(预订ID、会员ID、会话ID、成本) 会话(会话ID,活动,位置) (fk memberid,fk sessionid)预订链接到(会员主键)和(会话主键) 课时活动像足球、游泳、羽毛球、网球 我想运行以下查询 查找在2009年12月期间预订了“足球”课程,但没有预订“游泳”课程的所有会员的姓名 sql 我做错了什么?它让我想起了一个有书《足球》和《游泳》的人 SELECT m_name, ( SELECT C
SELECT
m_name,
(
SELECT COUNT(bookingid)
FROM booking
WHERE memberid = ROOT.memberid
AND sessionid = [session.sessionid for football]
) AS FootballSessions,
(
SELECT COUNT(bookingid)
FROM booking
WHERE memberid = ROOT.memberid
AND sessionid = [session.sessionid for swimming]
) AS SwimmingSessions
FROM member ROOT
HAVING FootballSessions > 0
AND SwimmingSessions = 0
您可能需要说WHERE
,而不是在末尾附近说WHERE
,但这应该行得通
SELECT m_name
FROM members
WHERE memberid IN
( SELECT b.memberid
FROM booking b
JOIN session s
ON s.sessionid = b.sessionid
WHERE s.activity = "football"
)
AND memberid NOT IN
( SELECT b.memberid
FROM booking b
JOIN session s
ON s.sessionid = b.sessionid
WHERE s.activity = "swimming"
)
或
或
这看起来很可疑:
bb上的内部加入预订bb.bookingid=mm.memberid
SELECT m_name
FROM members
WHERE memberid IN
( SELECT b.memberid
FROM booking b
JOIN session s
ON s.sessionid = b.sessionid
WHERE s.activity = "football"
)
AND memberid NOT IN
( SELECT b.memberid
FROM booking b
JOIN session s
ON s.sessionid = b.sessionid
WHERE s.activity = "swimming"
)
SELECT m.m_name
FROM members m
WHERE EXISTS
( SELECT 0
FROM booking b
JOIN session s
ON s.sessionid = b.sessionid
WHERE s.activity = "football"
AND b.memberid = m.memberid
)
AND NOT EXISTS
( SELECT 0
FROM booking b
JOIN session s
ON s.sessionid = b.sessionid
WHERE s.activity = "swimming"
AND b.memberid = m.memberid
)
SELECT m.m_name
FROM booking b
JOIN members m
ON m.memberid = b.memberid
JOIN session s
ON s.sessionid = b.sessionid
WHERE s.activity IN ("football", "swimming")
GROUP BY b.memberid
HAVING COUNT(s.activity = "swimming") = 0