3

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

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

有任何想法吗?

4

3 回答 3

4

使用group byhaving

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

这将显示任何非唯一的对,因此如果没有行返回它的好键。

于 2011-11-30T22:15:47.417 回答
2

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

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

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

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

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

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

于 2011-11-30T22:12:12.470 回答
0

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

SELECT
    COUNT(*),xid,yid
    FROM YourTable
    GROUP BY xid,yid
    HAVING COUNT(*)>1
于 2011-11-30T22:16:29.010 回答