我有一個incidents
表,它與幾個表有關係1 to many
- 主要是針對此問題的上下文people
。WHERE子句,在連接表上,有多行
基本上,一個incident
可能有很多people
(參與)。
目前,我正在檢索incident
細節 - 再加上使用此查詢人的ID的級聯逗號分隔的字符串:
SELECT
i.`ID` AS `id`,
i.`Author_ID` AS `author_id`,
i.`Description` AS `description`,
i.`Date` AS `date`,
i.`Datetime_Created` AS `created`,
p.`Title` AS `period`,
GROUP_CONCAT(DISTINCT ip.`Person_ID` ORDER BY FIELD(ip.`Involvement`, 'V', 'P', 'W') ASC SEPARATOR ',') AS `people_ids`,
(SELECT COUNT(`ID`) FROM `reports` r WHERE r.Incident_ID = i.ID) AS `reports`,
i.`Status` AS `status`
FROM `incidents` i
LEFT JOIN `reports` ir ON ir.Incident_ID = i.ID
LEFT JOIN `people` ip ON ip.Incident_ID = i.ID
LEFT JOIN `periods` p ON i.Period_ID = p.ID
WHERE 1 NOT IN (SELECT Category_ID FROM `categories_link` WHERE `Incident_ID` = i.ID)
GROUP BY i.ID
ORDER BY i.`Date` DESC, p.`ID` DESC
這工作得很好,併產生類似的數據:
我現在想要做的是過濾這些報告,以便只有一個涉及的人是來自某年份組的學生的事件。
此信息可通過將其ID添加到students
表中找到。 students
表包含它們的ID
和Year_Group
字段。
其中一個複雜的是,一些從people_involved
表的ID可能不只是涉及學生 - 他們可能是工作人員,父母或我們的社區的其他成員。
我不想排除具有其它人參與,只要有來自參與過某一年組學生報告。
我寫了一個查詢,這似乎部分工作:
SELECT
i.`ID` AS `id`,
i.`Author_ID` AS `author_id`,
i.`Description` AS `description`,
i.`Date` AS `date`,
i.`Datetime_Created` AS `created`,
p.`Title` AS `period`,
GROUP_CONCAT(DISTINCT ip.`Person_ID` ORDER BY FIELD(ip.`Involvement`, 'V', 'P', 'W') ASC SEPARATOR ',') AS `people_ids`,
(SELECT COUNT(`ID`) FROM `reports` r WHERE r.Incident_ID = i.ID) AS `reports`,
i.`Status` AS `status`
FROM `incidents` i
LEFT JOIN `reports` ir ON ir.Incident_ID = i.ID
LEFT JOIN `people` ip ON ip.Incident_ID = i.ID
<< LEFT JOIN `student` stu ON ip.Person_ID = stu.db_id >>
LEFT JOIN `periods` p ON i.Period_ID = p.ID
WHERE 1 NOT IN (SELECT Category_ID FROM `categories_link` WHERE `Incident_ID` = i.ID)
<< AND `stu`.`Year_Group` = 11 >>
GROUP BY i.ID
ORDER BY i.`Date` DESC, p.`ID` DESC
但我就是無法想象,一個簡單的JOIN
就足夠了,我想實現的任務。
我認爲子查詢可能會這樣做,但我不知道從哪開始。
我會用沒有所有必要的incidents
數據的訪問此信息(年7名學生)將代碼(我認爲):
SELECT DISTINCT(p.`Incident_ID`)
FROM `people` p
LEFT JOIN `student` stu ON p.Person_ID = stu.db_id
WHERE stu.Year_Group = 7
如何捆綁那這個代碼?
我認爲你需要的事件,其中至少應該事件具有特定的年齡組包括學生(你的情況Year_Group 11)。我已經給了答案解釋的條件,檢查如果這是你在找什麼 –