0

我有两张桌子:A 和 B

表 A 列:
content_key data_key

表 B 列: content_key person_key

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

4

2 回答 2

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))
于 2012-08-20T19:54:41.953 回答
0

您应该能够使用COUNT()andGROUP BYdata_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
于 2012-08-20T19:45:21.367 回答