2013-05-28 35 views
1

我想根據以下兩個條件選擇一個父項:父項是否具有活動子項或根本沒有子項。以下內容涵蓋第一條:只有當沒有孩子時才加入?

SELECT p.* FROM parents p, children c 
WHERE p.status = 'active' 
AND c.parent_id = p.id AND c.status = 'active' 
ORDER BY RAND() LIMIT 1; 

如何添加第二個條件?

+1

閱讀上'LEFT JOIN's。 –

回答

0

嘗試這樣的事情

SELECT p.* 
FROM parents p, children c 
WHERE p.status = 'active' 
AND c.parent_id = p.id AND c.status = 'active' 
union 
SELECT p.* 
FROM parents p 
where p.id not in (select distinct c.parent_id from children) 
ORDER BY RAND() LIMIT 1; 
0
SELECT * FROM parents 
LEFT JOIN children 
ON children.parent_id = parent.id AND children.status = 'active' 
WHERE parent.status = 'active' 
ORDER BY RAND() LIMIT 1; 
+0

我想兒童檢查必須在'WHERE'中才能加入以覆蓋提及的選項。 – glglgl

+0

'LEFT JOIN children ON children.parent_id = parent.id WHERE parent.status ='active'AND(children.status ='active'or children.status IS NULL)'resp。 'LEFT JOIN children ON children.parent_id = parent.id WHERE parent.status ='active'AND COALESCE(children.status,'active')='active'' – glglgl

+0

這會返回父母與非活動孩子(因爲加入條件將確保這樣的父母被包括在具有空值子列的select中)。 –

2

嘗試:

SELECT p.* FROM parents p 
LEFT JOIN children c 
ON children.parent_id = parent.id and children.status <> 'active' 
WHERE parent.status = 'active' AND children.parent_id is null 
ORDER BY RAND() LIMIT 1; 
相關問題