我有一个采用以下形式的数据库表 methodID,parentID,headerID和唯一标识符的临时唯一ID。此表没有外键,父ID只指向同一个表中的另一个条目(稍后将这些条目转换为层次结构ID,但这里并不重要)。
我有四种不同类型的方法(1-4),每种方法必须始终是同一类型方法的子类。例如,如果方法2是方法1的子节点,则每个方法2必须具有方法1作为其父节点。
我需要一个验证,它将选择违反此规则的任何值。
我一直在尝试使用以下选项来对信息进行排序:
SELECT *,
'A method must always have the same type of parent method'
FROM dr_Allocation_Layer_D_Validation valTable
LEFT JOIN dr_Allocation_Layer_D_Validation DUPE ON DUPE.vd_headerID = valTable.vd_headerID
AND DUPE.vd_temp_uniqueID = valTable.vd_parentID
我一直在尝试选择中的WHERE子句只选择方法,父方法类型对于每个方法并不总是相同。如果有人能帮我解决这个问题,我将不胜感激。
此外,我在SQL Server 2012中工作。提前感谢!
答案 0 :(得分:1)
使用having
条件选择具有1个以上不同parentID的方法。因为您需要的所有值都在行中,所以您不需要连接就可以解决这个问题,但是您需要一个连接来整齐地显示有问题的行。
SELECT DUPE.*
'A method must always have the same type of parent method'
FROM (
select vd_methodID
from dr_Allocation_Layer_D_Validation
group by vd_methodID
having count(distinct vd_parentID) > 1) m
JOIN dr_Allocation_Layer_D_Validation DUPE ON DUPE.vd_methodID = m.vd_methodID
答案 1 :(得分:1)
您可以使用exists
检查是否存在具有相同methodID
和不同parentID
的其他行。
select * , 'A method must always have the same type of parent method'
from dr_Allocation_Layer_D_Validation t1
where exists (
select 1 from dr_Allocation_Layer_D_Validation t2
where t2.vd_methodID = t1.vd_methodID
and t2.vd_parentID <> t1.vd_parentID
)