MySQL:如果 meta_key 不存在,则 return 个帖子

MySQL: return posts if meta_key does NOT exist

我有一个查询 returns 一只宠物 post 如果 meta_key 存在并且不是 '':

-- Pets that are assigned tags
SELECT p.ID
FROM FxFfekP0_posts p LEFT JOIN FxFfekP0_postmeta pm
ON p.ID = pm.post_id
WHERE p.post_type = 'pets'
AND pm.meta_key = 'tag'
AND pm.meta_value != ''

但现在我需要得到一个包含 post 的结果集,这些 post 根本不包含 meta_key tag,或者 meta_key tag = '' ...

帮忙?

像这样的东西应该可以工作:

SELECT p.ID
FROM FxFfekP0_posts p LEFT JOIN FxFfekP0_postmeta pm
ON p.ID = pm.post_id AND pm.meta_key = 'tag'
WHERE p.post_type = 'pets'
AND ifnull(pm.meta_value, '') = ''

我已将 pm.meta_key = 'tag' 移动到连接条件中,因此结果集中仍会出现缺失的行(如 NULLs); ifnull() 然后允许一个条件来选择 NULL 和空字符串。

我相信这对我正在寻找的东西有用......除非有人能指出这个查询失败的地方:

SELECT p.ID
FROM FxFfekP0_posts p
LEFT JOIN FxFfekP0_postmeta pm ON pm.post_id = p.ID 
AND pm.meta_key = 'tag'
WHERE p.post_type = 'pets'
AND pm.meta_key IS NULL 
OR pm.meta_value = ''