[英]mysql left outer join
我有一些SQL表
table classes(id_classes,specialty,level)
table Teaching unit(id_unit,name,...,#id_classes)
table courses(#id_course,....,#id_unit)
table groupes(id_groupe,...,#id_classes)
table assignment(#id_groupe,#id_course)
我想找到不屬於給定組的課程,因此該課程取決於取決於組的班級的單元
我寫了這段代碼
select * from courses c
left join assignment a
on a.idcourse=c.idcourse and a.id_groupe ='given id'
where a.id_courses is null
但這返回的課程取決於所有未分配的課程
例如,我有一個ID為1的班級和ID為2的班級,ID為1的班級,課程1,2和3依賴於單元1,而延后到課程1的課程4,5和6取決於依賴於課程2的單元2組1依賴表分配中的類1我有2行(groupe1,courses1),(groupe1,courses2)我要查詢返回仍未分配給組1的課程3的查詢,查詢返回課程3 ,4、5和6,但我只想獲得課程3
select c.* from courses c ,unit u where (courses not in asignment where id_groupe=given id) and u.idunit=c.idunit and u.classes is the same classes form the given groupe
根據您的描述,您的左聯接是不正確的,因為您沒有任何代碼來表達您的額外矛盾“ u.idunit = c.idunit和u.classes是與給定組相同的類”
這應該是您想要的代碼:
SELECT *
FROM courses c
LEFT JOIN assignment a ON c.id_course = a.id_course
INNER JOIN teachingUnit u ON u.id_unit = c.id_unit
AND u.id_classes IN (SELECT id_classes
FROM groupes
WHERE id_groupe = ‘givenID’)
WHERE a.id_course IS NULL AND a.id_groupe = ‘givenID’
這個子查詢
(SELECT id_classes
FROM groupes
WHERE id_groupe = ‘givenID’)
處理u.classes的約束是與給定組相同的類。 teachingUnit u ON u.id_unit = c.id_unit
上的INNER JOIN
teachingUnit u ON u.id_unit = c.id_unit
處理“和u.idunit = c.idunit”的約束
我希望這有幫助。 因為在您的示例中,表名和列不一致,並且目標難以理解。 這個解決方案是我最好的解決方案,它是出於必要而做出的最小假設。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.