简体   繁体   English

显示结果不在连接表中

[英]Show Results not in joining table

I have three tables:我有三张表:

  1. children孩子们
  2. activities活动
  3. signupActivity注册活动

Table 'children' contains details of children.表“儿童”包含儿童的详细信息。

Table 'activities' contains details of an activity.表“活动”包含活动的详细信息。

When a child signs up for an activity an entry is added to the table with the activityID and childID.当一个孩子注册一个活动时,一个带有activityID 和childID 的条目被添加到表中。 I am trying to get a list of children that haven't signed up to an activity.我正在尝试获取尚未报名参加活动的儿童名单。 I have tried the following query but I am getting an error:我尝试了以下查询,但出现错误:

"Not unique table/alias: 'children'" “不是唯一的表/别名:‘儿童’”

SELECT children.childrenEmailAddress
FROM children 
    INNER JOIN activities ON signupActivity.SignupActivityID = activities.activityID
    INNER JOIN children ON signupActivity.signupActivitychildID = children.childrenID
LEFT JOIN signupActivity ON children.childrenID = signupActivity.signupActivitychildID
WHERE activities.activityID = 8

The recordset would also need to include a result based on joining a 'section' in the tables Children and Activity.记录集还需要包含基于加入表 Children 和 Activity 中的“部分”的结果。 children.childrenSection = activities.activitySection as well as filtering the recordset by activities.activityID children.childrenSection = activity.activitySection 以及通过 activity.activityID 过滤记录集

This was the final that I adapted from Arth:这是我改编自 Arth 的决赛:

 SELECT c.childrenEmailAddress
     FROM children c
     JOIN activities a
       ON a.activitySection = c.childrenSection
        AND a.activityID = 8
LEFT JOIN signupActivity sa 
       ON sa.signupActivitychildID = c.childrenID
    WHERE sa.signupActivitychildID IS NULL
SELECT
    *
FROM
    Childeren C1
WHERE
    NOT EXISTS (SELECT *
        FROM
           signupActivity S1
        WHERE
           S1.activityID= 8 AND
           C1.ChildID= S1.ChildID)

I'd use a LEFT JOIN and a NULL check我会使用LEFT JOINNULL检查

   SELECT c.childrenEmailAddress
     FROM children c
LEFT JOIN signupActivity sa 
       ON sa.signupActivitychildID = c.childrenID
      AND sa.SignupActivityID = 8
    WHERE sa.signupActivitychildID IS NULL

Personally I'm not a fan of repeating the table name in each of the column names.. I find it unnecessary and frustrating to work with.就我个人而言,我不喜欢在每个列名中重复表名。我觉得使用它是不必要的并且令人沮丧。 Your query could be as simple as:您的查询可能很简单:

   SELECT c.emailAddress
     FROM child c
LEFT JOIN signupActivity sa 
       ON sa.childId = c.id 
      AND sa.activityID = 8
    WHERE sa.childId IS NULL 

UPDATE更新

   SELECT c.childrenEmailAddress
     FROM children c
     JOIN activities a
       ON a.activitySection = c.childrenSection
      AND a.activityID = 8
LEFT JOIN signupActivity sa 
       ON sa.signupActivitychildID = c.childrenID
      AND sa.signupActivityactivityID = a.activityID
    WHERE sa.signupActivitychildID IS NULL
SELECT *
FROM `children` c
WHERE c.childID NOT IN(
SELECT `childID`
FROM `activities`);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM