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'
移动到连接条件中,因此结果集中仍会出现缺失的行(如 NULL
s); 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 = ''
我有一个查询 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'
移动到连接条件中,因此结果集中仍会出现缺失的行(如 NULL
s); 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 = ''