MySQL加入同桌

时间:2012-05-13 23:29:49

标签: mysql sql

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

  • id
  • post_id
  • meta_key
  • meta_value

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

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

3 个答案:

答案 0 :(得分:16)

要实现这一目标,您应该使用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

答案 1 :(得分:8)

对自己进行外部(左)连接,通过在连接表中查找具有空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

答案 2 :(得分:0)

选择md1。*

来自meta_data md1

在md1.post_id = md2.post_id和md2.meta_key ='def'上左连接meta_data md2

其中md1.meta_key ='abc'

并且md2.post_id为空