簡體   English   中英

mysql左外連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM