19

我有包含以下字段的表'meta_data':

  • ID
  • post_id
  • 元密钥
  • 元值

我想循环并显示每个帖子(post_id)的列表,其中包含一个条目meta_key='abc'没有一个meta_key='def'

基本上,每个有条目的帖子都应该有一个meta_key='abc'条目。我想生成列表,以便添加缺少的条目。meta_key='def'meta_key='def'

4

2 回答 2

25

为此,您应该使用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.post_id IS null
于 2012-05-13T23:33:48.587 回答
11

对自身进行外部(左)连接,通过在连接表中查找具有空 id 的行来过滤那些不匹配的记录:

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
于 2012-05-13T23:33:48.237 回答