我有一个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 ...
这会导致“输入”下的红线让我感到困惑。
有人可以就如何解决这个问题提出建议吗?谢谢。
答案 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