我正在使用以下公用表表达式来解析自引用表.但CTE不起作用,产生无限循环并产生错误:
Msg 530,Level 16,State 1,Line 1声明终止.在语句完成之前,最大递归100已用尽.
如何修改此CTE以使其工作?
SET NOCOUNT ON;
USE tempdb;
IF OBJECT_ID('dbo.Employees', 'U') IS NOT NULL DROP TABLE dbo.Employees;
CREATE TABLE dbo.Employees
(
empid INT NOT NULL PRIMARY KEY,
mgrid INT NULL REFERENCES dbo.Employees,
empname VARCHAR(25) NOT NULL,
salary MONEY NOT NULL,
CHECK (empid > 0)
);
INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES
(1, 1, 'David' , $10000.00),
(2, 1, 'Eitan' , $7000.00),
(3, 1, 'Ina' , $7500.00),
(4, 2, 'Seraph' , $5000.00),
(5, 2, 'Jiru' , …Run Code Online (Sandbox Code Playgroud) 我正在研究一个项目,我们需要计算不同行的数量.方案的简化版本包括user表,keyword表和keyword_user表.
该user表仅包括公共用户元数据,如名称等.下面列出了其他表.
keyword_user:
id
user_id
keyword_id
Run Code Online (Sandbox Code Playgroud)
关键词:
id,
description
Run Code Online (Sandbox Code Playgroud)
我想要做的是根据用户keyword_id找到最大用户数(5),同时还计算匹配行的总数.计数必须是不同的.
查询:
SELECT TOP 5 u.[id],
u.[firstname],
u.[lastname],
total = Count(*) OVER()
FROM [user] u
INNER JOIN [keyword_user] ku
ON u.[id] = ku.[user_id]
WHERE ( ku.keyword_id IN ( '5f6501ec-0a71-4067-a21d-3c5f87a76411', 'c19b95c0-8554-4bbd-9526-db8f1c4f1edf'))
AND u.id NOT IN ( '12db3001-b3b9-4626-8a02-2519102cb53a' )
Run Code Online (Sandbox Code Playgroud)
结果集:
+--------------------------------------+-----------+----------+-------+
| id | firstname | lastname | total |
+--------------------------------------+-----------+----------+-------+
| F0527AC3-747A-45A6-9CF9-B1F6C7F548F8 | Kasper | Thomsen | 3 |
| 95988F6D-9C91-4779-B6C3-3D4B4D6AE836 | Michael | …Run Code Online (Sandbox Code Playgroud) 在Oracle中,我们可以使用该函数CONNECT_BY_ISCYCLE来检测分层查询中的循环.我尝试在SQL Server中执行相同的操作.有没有办法做到这一点?
非常感谢!