sql - 从查询中删除联合
问题描述
我有查询以获取同一类别的类别和子类别。我使用了以下查询:
Select Id from category where name like '%events%' and deleted = 0 and published = 1
UNION
SELECT Id from category where parentcategoryid = (Select id from category where name like '%events%' and deleted = 0 and published = 1)
我不想使用 UNION,只想使用 Join。但没有得到我如何实现。下面是表结构。请帮我。提前致谢
解决方案
以下可能会解决您的问题:
DECLARE @t TABLE (id int, name varchar(20), parentcatid varchar(200))
insert into @t values(23,'Christmas', 34)
,(29,'Birthday', 34)
,(31,'New year', 34)
,(34,'Events', 0)
,(35,'gfrhrt', 0)
;WITH cte AS(
Select Id from @t
where name like '%events%' --and deleted = 0 and published = 1
),
cte2 AS (
SELECT a.id AS tId, cpa.id, cId2.id AS idPa
from @t a
LEFT JOIN cte AS cId ON cId.Id = a.Id
FULL OUTER JOIN @t AS cPa ON cPa.parentcatid = cId.Id
LEFT JOIN cte cId2 ON cId2.id = cPa.id
WHERE cId.Id IS NOT NULL OR cPa.Id IS NOT NULL
)
SELECT id
FROM cte2
WHERE tId IS NOT NULL
OR id = idPa
这个想法是在 cte 中获取所有必需的 ID,然后获取所有类别,其中任一 ID 或 ParentID 与来自 cte 的 ID 匹配。但是,根据表的大小,您可能希望向 cte 添加更多过滤器。
推荐阅读
- powershell - 供应商/发行商卸载 Powershell
- kubernetes - Kubernetes 中的工作节点可以运行两个不同的 Pod 吗?
- node.js - 如何访问 Heroku 的默认 MongoDB 数据库。我在没有任何 mongo 字符串的情况下上传到 Heroku
- firebase - Flutter 的 Firestore 错误代码列表
- microsoft-graph-api - 在所有用户的频道消息中搜索
- javascript - 要求 sequilize 模块在某些快速应用程序文件中返回未定义
- uno-platform - 未实现的 UIElement.FlowDirection 缺少“NotImplemented”属性
- allen-sdk - 我在哪里可以下载视觉编码实验 (allen-sdk) 的图像或视频刺激?
- php - POST 端点上的 PHPUnit 测试用例返回 400
- javascript - 如果使用 innerHTML 创建按钮将不起作用