2012-05-13 21 views
11

Tengo la tabla 'meta_data' con los siguientes campos:MySQL Join misma mesa

  • Identificación
  • post_id
  • meta_key
  • meta_value

me gustaría bucle y muestra una lista de CADA publicación (post_id) que tiene una entrada para meta_key='abc' pero no uno para meta_key='def'

Básicamente, todos los envíos que tiene una entrada de meta_key='abc' debe tener una entrada meta_key='def'. Quiero generar la lista para poder agregar las entradas meta_key='def' que faltan.

+5

Eso está bien, pero ¿qué has intentado? –

Respuesta

14

Para esto usted debe achive utilice la operación LEFT OUTER JOINuniendo la misma tabla.

SELECT a.* 
FROM meta_data a 
LEFT OUTER JOIN meta_data b ON a.post_id = b.post_id AND b.meta_value = 'def' 
WHERE 
a.meta_value = 'abc' 
AND b.id IS null 
7

Hacer una exterior (izquierda) se unen a sí mismo, el filtrado de aquellos registros que no lo hacen partido mediante la búsqueda de filas con un ID nulo en la tabla unida:

select t1.* 
from meta_data t1 
left join meta_data t2 on t2.post_id = t1.post_id and t2.meta_key='def' 
where t1.meta_key='abc' 
and t2.id is null