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