sql验证两个表的关系

时间:2012-08-20 19:41:18

标签: sql

我有两张桌子:A和B

表A栏:
content_key data_key

表B栏: content_key person_key

我需要验证每个data_key只有一个与之关联的person_key,它可以多次使用相同的person_key,但只能有一个唯一值。

2 个答案:

答案 0 :(得分:0)

您应该能够使用COUNT()GROUP BY data_keyperson_key

SELECT count(data_key) cnt, data_key, person_key
FROM tableA a
INNER JOIN tableB b
    ON a.content_key = b.content_key
GROUP BY data_key, person_key

答案 1 :(得分:0)

执行此操作的好方法是使用COUNT(DISTINCT):

select A.data_key, count(distinct person_key) as numPersons
from A join
     B
     on A.content_key = B.content_key
group by A.data_key
order by 2 desc

我添加了订单,因此您可以先查看重复项。

好吧,既然您要验证而不是查看重复项,请添加HAVING子句:

having count(distinct person_key) > 1

如果查询没有返回任何行,则数据符合您的条件。

此外,这假设person_key永远不是NULL。如果发生这种情况,计数会更复杂一些:

(COUNT(distinct person_key) + max(case when person_key is null then 1 else 0 end))