Sql 在搜索查询中附加内部联接的替代方法
搜索帖子时,用户可以从要筛选的类别列表中进行选择,这将返回与所选所有类别相关的帖子Sql 在搜索查询中附加内部联接的替代方法,sql,postgresql,inner-join,Sql,Postgresql,Inner Join,搜索帖子时,用户可以从要筛选的类别列表中进行选择,这将返回与所选所有类别相关的帖子 SELECT * FROM posts INNER JOIN category_joins as filter_categories_join ON filter_categories_join.categorizable_id = posts.id AND filter_categories_join.categorizable_type = 'Post' INNER JOIN categories
SELECT *
FROM posts
INNER JOIN category_joins as filter_categories_join
ON filter_categories_join.categorizable_id = posts.id
AND filter_categories_join.categorizable_type = 'Post'
INNER JOIN categories as filter_categories
ON filter_categories.id = filter_categories_join.category_id
INNER JOIN category_joins as categories_join_1
ON categories_join_1.categorizable_id = posts.id
AND categories_join_1.categorizable_type = 'Post'
INNER JOIN categories as categories_1
ON categories_1.id = categories_join_1.category_id
INNER JOIN category_joins as categories_join_2
ON categories_join_2.categorizable_id = posts.id
AND categories_join_2.categorizable_type = 'Post'
INNER JOIN categories as categories_2
ON categories_2.id = categories_join_2.category_id
WHERE filter_categories.lft BETWEEN 14 AND 115
AND categories_1.lft BETWEEN 133 AND 134
AND categories_2.lft BETWEEN 137 AND 138
有没有办法避免为每个类别筛选器追加内部联接
更新:
此处对关联的描述:
有许多帖子
类别
与帖子
相关,通过类别
可分类类别加入
通过categories
categories\u连接有许多
帖子
连接。您的查询可以简化为
SELECT p.*
FROM posts p
INNER JOIN category_joins cj
ON cj.categorizable_id = p.id
AND cj.categorizable_type = 'Post'
INNER JOIN categories c
ON c.id = cj.category_id
AND c.lft BETWEEN 14 AND 115
INNER JOIN categories c1
ON c1.id = cj.category_id
AND c1.lft BETWEEN 133 AND 134
INNER JOIN categories c2
ON c2.id = cj.category_id
AND c2.lft BETWEEN 137 AND 138;
你迫使我们猜测,请你提供示例数据并描述数据的行为结构。例如,我假设posts
和category\u连接之间的连接是1:many
?category\u join
和filter\u categories
之间的连接是1:1
?你需要提供更多的信息才能得到一个完整的答案。