Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在搜索查询中附加内部联接的替代方法_Sql_Postgresql_Inner Join - Fatal编程技术网

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
?你需要提供更多的信息才能得到一个完整的答案。