使用 LEFT JOIN 和多个条件从 SQL 中进行选择

使用 LEFT JOIN 和多个条件从 SQL 中进行选择

我正在尝试使用多个过滤器来获取帖子,我的数据库如下,

“元”表

ID 元键 元值 对象名称 对象 ID
2 地点 新城市 邮政 2
1 帖子类型 部分 邮政 2

元表

“帖子”表

ID 标题 摘抄 描述 mime
_type
地位 父母 帖子
类别
日期时间 排序
_id
作者
_id
2 测试 -1 邮政 2021-04-12 03:06:06 0 0
1 测试帖子 一些描述 积极的 -1 邮政 2021-04-12 12:09:32 0 1

在此处输入图片描述

  SELECT p.id,90p.title
  FROM posts p
  LEFT JOIN meta m
  ON p.id = m.object_id and m.object_name='post'
  WHERE m.meta_key='location' and m.meta_value='new city'
  and m.meta_key='post_type' and m.meta_value='section'
  group by p.id

我尝试了上述 SQL,但问题是我无法形成正确的条件语句,我需要获取所有具有元键“帖子类型”且值为“部分”以及元键“位置”且值为“新城市”的帖子。

但此查询确实适用于单一过滤器。

  SELECT p.id,90p.title
  FROM posts p
  LEFT JOIN meta m
  ON p.id = m.object_id and m.object_name='post'
  WHERE m.meta_key='location' and m.meta_value='new city'
  group by p.id

答案1

SELECT p.id, p.title
FROM posts p
JOIN meta m ON p.id = m.object_id
WHERE m.object_name='post'
  AND (m.meta_key, m.meta_value) IN ( ('location', 'new city'),
                                      ('post_type', 'section') )
GROUP BY p.id, p.title
HAVING COUNT(DISTINCT m.id) = 2

相关内容