MySQL加入同桌

exe*_*ecv 14 mysql sql

我有'meta_data'表,其中包含以下字段:

  • ID
  • POST_ID
  • meta_key
  • meta_value

我想循环并显示一个EACH post(post_id)列表,其中包含一个条目meta_key='abc'不是一个条目meta_key='def'

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

Gra*_*tzy 17

要实现此目的,您应该使用连接同一个表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
Run Code Online (Sandbox Code Playgroud)


Boh*_*ian 9

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