我有兩個表:家長和學生MySQL的選擇,如果在其他表中沒有匹配
學生表有父ID作爲外鍵,一個學生可以有狀態FULL或左側。多個學生可以屬於一個家長條目。
我需要選擇所有隻有學生具有「左」狀態的父行 - 即如果他們有兩個學生,一個左和一個滿,那麼這個家長將被忽略。
我試過一堆查詢等,但不知道如何解決這個問題。我也考慮過讓所有學生作爲一個查詢,然後以某種方式循環查看結果,並抽出沒有任何FULL學生的家長 - 但還沒有成功。
任何幫助,將不勝感激。
我使用PHP
我有兩個表:家長和學生MySQL的選擇,如果在其他表中沒有匹配
學生表有父ID作爲外鍵,一個學生可以有狀態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
一畫不好圖
在一個簡單的方法: 您可以在子查詢中提取「左」和「全」分開,做沒有「完整」條目的左外連接。
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小提琴鏈路 http://sqlfiddle.com/#!2/f4249c/6
看一看=> [** SQL的可視化表示加入**](http://www.codeproject.com/Articles/33052/Visual-Representation -SQL-Joins) – 2014-09-23 03:33:40
感謝您的鏈接,這是一個很好的方式來展示如何加入工作。但是,它並沒有真正幫助我如何根據列條目選擇我想要的數據(除非我忽略了某些內容?)我可以選擇所有學生並將它們與父母進行匹配,但仍然不確定如何僅返回數據所有的家長學生都離開了 – Pedro 2014-09-23 03:44:17
不客氣。看看下面給出的答案;它看起來有希望。 – 2014-09-23 03:50:23