Вопрос по sql, mysql – MySQL присоединиться к той же таблице

12

У меня есть таблица «meta_data» со следующими полями:

id post_id meta_key meta_value

Я хотел бы просмотреть и просмотреть список КАЖДОГО поста (post_id) который имеет запись дляmeta_key='abc' ноnot один дляmeta_key='def'

В основном, каждый пост, который имеетmeta_key='abc' записьshould иметьmeta_key='def' запись. Я хочу создать список, чтобы я мог добавить недостающиеmeta_key='def' записей.

Это хорошо, но что вы пробовали? OMG Ponies

Ваш Ответ

2   ответа
8

Сделайте внешнее (левое) соединение с самим собой, отфильтровывая те записи, которыеdon't сопоставьте, ища строки с нулевым идентификатором в объединенной таблице:

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
15

Чтобы достичь этого, вы должны использоватьЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ операцияjoining the same table.

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

Похожие вопросы