Tengo una base de datos donde la tabla article
tiene una relación de varios a sí misma (a través de article_rel
) y articles
tiene types
. Los padres tienen un tipo de 1234, mientras que los niños pueden ser de varios tipos.Una mejor forma de subconsultar
Estoy tratando de encontrar a los padres que: no tienen hijos; o, si tienen hijos, el artículo infantil más reciente no pertenece a un determinado conjunto de tipos.
Lo siguiente funciona razonablemente bien para la segunda parte, pero no aborda la primera parte. Cada intento que hice para sacar la subconsulta para poder hacer referencia al valor que devuelve (para agregar "o es nulo") ha fallado. También me pregunto en general si hay una mejor manera de escribir algo como esto.
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