我有一个名为Documents的表,具有Document_ID(主键)和Cluster_ID字段,现在我希望所有基于Document_ID(作为参数传递)具有相同Cluster_ID的Document_ID,Cluster_ID的默认值为-1。
例如:dbo.Documents
Document ID ******** Cluster_ID
- 1****************** -1
- 2****************** 1001
- 3****************** 1001
- 4****************** -1
- 5****************** 1002
- 6****************** 1001
- 7****************** -1
- 8****************** -1
- 9****************** -1
现在,如果Document_ID为2,那么我希望结果为Document_ID = 2,3,6的行,在这里我无法处理cluster_ID = -1的记录;(因为该表的id默认值为-1,并且有数百个表中的匹配记录)
我尝试了下面提到的查询,它工作正常,但是当我对Document_ID = 7执行查询时,它将返回5行,cluster_ID = -1,
SELECT d2.*
FROM dbo.Documents d1
join dbo.Documents d2 on d1.Cluster_ID=d2.Cluster_ID
WHERE d1.Document_ID =2
我的问题是:它正在从表中返回所有具有Cluster_ID = -1的行,我想要的是,如果Cluster_ID = -1,则返回单行,否则返回具有相同cluster_ID的所有行
试试这个查询
SELECT
Document_ID,
Cluster_ID
FROM Documents
WHERE Cluster_ID =
(
SELECT
Cluster_ID
FROM Documents
WHERE Document_ID = @Document_ID
)
AND Cluster_ID <> -1
UNION
SELECT
Document_ID,
Cluster_ID
FROM Documents
WHERE Document_ID = @Document_ID
AND Cluster_ID = -1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句