[英]Show Results not in joining table
我有三張表:
表“兒童”包含兒童的詳細信息。
表“活動”包含活動的詳細信息。
當一個孩子注冊一個活動時,一個帶有activityID 和childID 的條目被添加到表中。 我正在嘗試獲取尚未報名參加活動的兒童名單。 我嘗試了以下查詢,但出現錯誤:
“不是唯一的表/別名:‘兒童’”
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
記錄集還需要包含基於加入表 Children 和 Activity 中的“部分”的結果。 children.childrenSection = activity.activitySection 以及通過 activity.activityID 過濾記錄集
這是我改編自 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)
我會使用LEFT JOIN
和NULL
檢查
SELECT c.childrenEmailAddress
FROM children c
LEFT JOIN signupActivity sa
ON sa.signupActivitychildID = c.childrenID
AND sa.SignupActivityID = 8
WHERE sa.signupActivitychildID IS NULL
就我個人而言,我不喜歡在每個列名中重復表名。我覺得使用它是不必要的並且令人沮喪。 您的查詢可能很簡單:
SELECT c.emailAddress
FROM child c
LEFT JOIN signupActivity sa
ON sa.childId = c.id
AND sa.activityID = 8
WHERE sa.childId IS NULL
更新
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.