MySQL присоединяется к одной таблице
У меня есть таблица meta_data со следующими полями:
- id
- post_id
- meta_key
- meta_value
Я хотел бы пропустить и показать список сообщений EACH (post_id
), в котором есть запись для meta_key='abc'
, но не одна для meta_key='def'
В принципе, каждая запись, имеющая запись meta_key='abc'
, должна иметь запись meta_key='def'
. Я хочу сгенерировать список, чтобы добавить отсутствующие записи meta_key='def'
.
Ответы
Ответ 1
Чтобы достичь этого, вы должны использовать LEFT OUTER JOIN операцию , соединяющую ту же таблицу.
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
Ответ 2
Сделайте внешнее (левое) соединение для себя, отфильтровывая те записи, которые не совпадают, ища строки с нулевым идентификатором в объединенной таблице:
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