Sql 从具有唯一PK和重复FK的表中查找一条记录

Sql 从具有唯一PK和重复FK的表中查找一条记录,sql,sql-server-2005,tsql,Sql,Sql Server 2005,Tsql,我想从一个具有唯一主键和重复外键的表中得到一条记录 请参阅下面的附图 谢谢主键的定义意味着只有一行,因此您的问题实际上似乎是包含多个子行的任意行: select * from table1 t where exists ( select id from table2 t2 where t2.fkid = t.id group by t2.id having count(*) > 1 ) 这将从表中检索所有唯一的fk和textVal值: sele

我想从一个具有唯一主键和重复外键的表中得到一条记录

请参阅下面的附图


谢谢

主键的定义意味着只有一行,因此您的问题实际上似乎是包含多个子行的任意行:

select * 
from table1 t
where exists (
    select id from table2 t2
    where t2.fkid = t.id
    group by t2.id
    having count(*) > 1
    )

这将从表中检索所有唯一的fk和textVal值:

select distinct fk, textVal from myTable

看看这个例子

这将找到表1中的所有ID,表2中的ID作为外键复制

DECLARE @Table1 TABLE(
        id INT
)

DECLARE @Table2 TABLE(
        id INT,
        fkid INT
)

INSERT INTO @Table1 (id) SELECT 1
INSERT INTO @Table1 (id) SELECT 2
INSERT INTO @Table1 (id) SELECT 3

INSERT INTO @Table2 (id,fkid) SELECT 1, 1
INSERT INTO @Table2 (id,fkid) SELECT 2, 2
INSERT INTO @Table2 (id,fkid) SELECT 3, 2
INSERT INTO @Table2 (id,fkid) SELECT 4, 3
INSERT INTO @Table2 (id,fkid) SELECT 5, 3
INSERT INTO @Table2 (id,fkid) SELECT 6, 3

SELECT  t2.fkid
FROM    @Table2 t2
GROUP BY t2.fkid
HAVING COUNT(t2.fkid) > 1

表上的实际主键是什么?示例数据有重复的行(7和8)
Select fk, Count(*) 
from table1
group by fk
having count(*) > 1