在SQL中逻辑确定复合键

时间:2011-11-30 22:09:20

标签: sql sql-server primary-key composite-primary-key

我正在使用没有定义主键或唯一键约束的MSSQL表。有两个字段,我们称之为xId和yId,我相信它们将是一个复合键,但我想通过检查数据来确认这一点。

我在想我应该能够编写一个SQL计数语句,我可以将其与表中的记录总数进行比较,该记录将逻辑确定xId和yId的组合(或第三列id必需)实际上可以作为一个复合键。但是,我无法提出正确的GROUP BY或其他类型的条款来证实或反驳这一点。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

使用group byhaving

select xid,yid
from table
group by xid,yid
having count(1) > 1

这将显示任何非唯一的对,因此如果没有返回的行是一个好的密钥。

答案 1 :(得分:2)

只需执行表格总行数的count,然后执行

select count(1)
from(
    select xid,yid
    from table
    group by xid,yid
)a;

如果所有xidyid对形成唯一标识符,则这两个数字将相同。

或者,您可以计算xidyid的不同对的数量,并找到最大的这样的数字:

select max(num_rows)
from(
    select xid,yid,count(1) as num_rows
    from table
    group by xid,yid
)a;

当且仅当(1xid)对形成表格的唯一标识符时,此查询的结果为yid

答案 2 :(得分:0)

这将列出xid,yid的所有问题组合(如果有的话):

SELECT
    COUNT(*),xid,yid
    FROM YourTable
    GROUP BY xid,yid
    HAVING COUNT(*)>1
相关问题