Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql在对组数据进行细分时出现问题_Mysql_Database - Fatal编程技术网

mysql在对组数据进行细分时出现问题

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

我有三张桌子 成员(成员ID,m_名称,状态ID,地址,DOB,电话) 预订(预订ID、会员ID、会话ID、成本) 会话(会话ID,活动,位置)

(fk memberid,fk sessionid)预订链接到(会员主键)和(会话主键)

课时活动像足球、游泳、羽毛球、网球 我想运行以下查询

查找在2009年12月期间预订了“足球”课程,但没有预订“游泳”课程的所有会员的姓名 sql

我做错了什么?它让我想起了一个有书《足球》和《游泳》的人

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