Лучший способ подзапроса

У меня есть БД, в которой таблица articleимеет отношение многие -к -многие к себе (черезarticle_relarticlesимеют types. Родители имеют тип 1234, а дети могут быть одного из нескольких типов.

Я пытаюсь найти тех родителей, у которых либо :нет детей; или, если у них есть дети, самая последняя дочерняя статья не относится к определенному набору типов.

Следующее работает достаточно хорошо для второй части, но не касается первой части. Все мои попытки извлечь подзапрос, чтобы я мог сослаться на возвращаемое им значение (, чтобы добавить «или равно нулю» ), не увенчались успехом. Мне также интересно, есть ли лучший способ написать что-то подобное.

SELECT 
 CONCAT('http://www.sitename.com/', n.id, '.html') as URL,
 n.added,
 u.email,
 n.body
 #c.body
 FROM
     warehouse.article n 
 inner join site.user u on n.user_id = u.id
 inner join warehouse.article_param np on np.id = n.id and np.param_name = 'ready' and np.param_value = 'true'
 where
     n.type_id = 1234 
 and
     (select 
           c.type_id 
      from 
           warehouse.article c, 
           warehouse.article_rel r
      where
           r.child_nid = c.id
           and r.parent_nid = n.id
      order by 
           c.added desc 
      limit 1)
      not in (2245,5443)
 order by 
      n.updated desc
6
задан Matt 8 May 2012 в 09:23
поделиться