我想根據以下兩個條件選擇一個父項:父項是否具有活動子項或根本沒有子項。以下內容涵蓋第一條:只有當沒有孩子時才加入?
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;
如何添加第二個條件?
我想根據以下兩個條件選擇一個父項:父項是否具有活動子項或根本沒有子項。以下內容涵蓋第一條:只有當沒有孩子時才加入?
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;
如何添加第二個條件?
嘗試這樣的事情
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;
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;
我想兒童檢查必須在'WHERE'中才能加入以覆蓋提及的選項。 – glglgl
'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
這會返回父母與非活動孩子(因爲加入條件將確保這樣的父母被包括在具有空值子列的select中)。 –
嘗試:
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;
閱讀上'LEFT JOIN's。 –