根据主键输入确定重复数据

时间:2016-03-23 18:57:51

标签: sql sql-server duplicates

我有一个SQL Server表A,它是1到多个表B和C,这样A中的1个条目可以通过外键在B和C中有很多条目。

我将A的主键传递给我的存储过程,我想确定输入ABC关系是否与数据库中的任何ABC关系有重复数据。

重复的条件如下。

如果输入行的BC列数据也存在于另一个A条目的数据库中,我们将调用A`,然后BC`是BC的副本,A'是A的副本。该过程应该返回'主键。

到目前为止,我一直在决定如何用声明性语言来做这件事。我的最新尝试与C中存在的B列存在问题。

DECLARE @InputAPrimaryKey INT

SELECT B.APrimaryKey
FROM B, C
JOIN(SELECT *
     FROM  B, C
     WHERE B.APrimaryKey = C.APrimaryKey
     AND   B.AprimaryKey = @InputAPrimaryKey) As input
     ON input.Bcolumndata = B.columndata
     AND input.Ccolumndata = C.columndata
     AND ...

这会导致“输入”下的红线让我感到困惑。

有人可以就如何解决这个问题提出建议吗?谢谢。

1 个答案:

答案 0 :(得分:1)

尝试像这样的人(如果我做对了你的任务)

set nocount on

declare @A table ( APrimaryKey int not null )
insert @A values (1),(2),(3)

declare @B table ( APrimaryKey int not null, ColumnData nvarchar(10) )

insert @B values (1,'one'),(1,'four'),(3,'three'),(3,'four')

declare @C table ( APrimaryKey int not null, ColumnData nvarchar(10) )

insert @C values (1,'one'),(1,'two'),(2,'three'),(3,'two')

declare @Ainit integer = 1

select distinct B.APrimaryKey
from @B B
join @C C  on B.APrimaryKey = C.APrimaryKey
where exists  ( select B1.APrimaryKey
                from @B B1
                join @C C1
                on B1.APrimaryKey = C1.APrimaryKey
                and B1.APrimaryKey <> @Ainit

                and B1.ColumnData = B.ColumnData
                and C1.ColumnData = C.ColumnData
                -- Put your additional conditions
)
and  B.APrimaryKey <> @Ainit

结果是

APrimaryKey
-----------
     3