Sql 连接2个查询或在第二个查询中使用on的结果

Sql 连接2个查询或在第二个查询中使用on的结果,sql,sql-server,Sql,Sql Server,我有一个查询,根据搜索条件提供搜索产品的类别 这意味着查询将提供在给定搜索条件下可以找到其产品的所有类别 第一个查询的值需要在第二个查询中使用 WITH sub_categories AS ( select categories.left, categories.right from categories inner join ... inner join ... where ....

我有一个查询,根据搜索条件提供搜索产品的类别

这意味着查询将提供在给定搜索条件下可以找到其产品的所有类别

第一个查询的值需要在第二个查询中使用

    WITH
      sub_categories AS (
        select categories.left, categories.right
        from categories 
        inner join ...
        inner join ...


        where ....
      ),
      main_categories AS (
       SELECT * 
        FROM categories
        WHERE lft < 9 AND rgt > 10 
      )
SELECT *
  FROM main_categories 
  UNION 
  SELECT *
  FROM sub_categories 
对于sub_categories的值,我的意思是9应该替换为sub_categories。left或类似的内容,您可以在下面尝试

 WITH
      sub_categories AS (
        select categories.left, categories.right
        from categories 
        inner join ...
        inner join ...


        where ....
      ),
      main_categories AS (
       SELECT * 
        FROM categories inner join sub_categories on categories.id=sub_categories.id
        WHERE lft < sub_categories.left AND rgt > sub_categories.right
      )
SELECT *
  FROM main_categories 
  UNION 
  SELECT *
  FROM sub_categories 

问题是什么?要求没有明确。如果你在分类中有列名为left和right,那么你可能需要引用它们,因为它们似乎是关键字。F.e.【左】<9和【右】>10只是一个注释,请注意列名的拼写。在第一个CTE中使用categories.left和right,在第二个CTE中突然使用lft和rgt。这些专栏真的不同吗?然后在文本中再次显示为left<9和right>10。
 WITH
      sub_categories AS (
        select categories.left, categories.right
        from categories 
        inner join ...
        inner join ...


        where ....
      ),
      main_categories AS (
       SELECT * 
        FROM categories inner join sub_categories on categories.id=sub_categories.id
        WHERE lft < sub_categories.left AND rgt > sub_categories.right
      )
SELECT *
  FROM main_categories 
  UNION 
  SELECT *
  FROM sub_categories