簡體   English   中英

mySQL選擇是否在其他表中沒有匹配項

[英]mySQL Select if no matches in other table

我有兩個表:父母和學生

學生表具有父母ID作為外鍵,學生的狀態可以為“已滿”或“左”。 多個學生可以屬於一個父條目。

我需要選擇所有只有狀態為“ LEFT”的學生的父母行-即,如果他們有兩個學生,一個LEFT和一個FULL,則該父母將被忽略。

我已經嘗試了一堆查詢等,但不確定如何解決。 我還考慮過讓所有學生查詢,然后以某種方式遍歷結果並退出沒有任何FULL學生的父母-但尚未成功。

任何幫助,將不勝感激。

我正在使用PHP

您可以使用“存在”和“不存在”來僅獲取“學生”表中處於左側狀態的父母。

select * from parent p
where exists ( select 1 from student s
               where s.status ='LEFT'
               and s.parent_id = p.id
             )
and not exists ( select 1 from student s
               where s.status ='FULL'
               and s.parent_id = p.id
             )

我建議在父ID上以及where滿學生為零的行上查詢。 像這樣(未經測試):

SELECT [...] FROM parent LEFT JOIN student ON parent.id = student.pid
WHERE SUM(CASE WHEN student.status = 'full' THEN 1 ELSE 0 END) = 0

一張繪制不好的圖

在此處輸入圖片說明

一種簡單的方法:您可以在子查詢中分別提取“ left”和“ full”,並在沒有“ full”條目的情況下進行左外部聯接。

SELECT t1.p_id
    ,t1.STATUS
FROM (
    (
        SELECT p_id
            ,STATUS
        FROM student
        WHERE STATUS = 'left'
        ) t1 LEFT OUTER JOIN (
        SELECT p_id
            ,STATUS
        FROM student
        WHERE STATUS = 'full'
        ) t2 ON t1.p_id = t2.p_id
    )
WHERE t2.p_id IS NULL
GROUP BY t1.p_id
    ,t1.STATUS;

SQL Fiddle鏈接http://sqlfiddle.com/#!2/f4249c/6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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