我正在使用没有定义主键或唯一键约束的MSSQL表。有两个字段,我们称之为xId和yId,我相信它们将是一个复合键,但我想通过检查数据来确认这一点。
我在想我应该能够编写一个SQL计数语句,我可以将其与表中的记录总数进行比较,该记录将逻辑确定xId和yId的组合(或第三列id必需)实际上可以作为一个复合键。但是,我无法提出正确的GROUP BY或其他类型的条款来证实或反驳这一点。
有什么想法吗?
答案 0 :(得分:3)
使用group by
和having
:
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;
如果所有xid
和yid
对形成唯一标识符,则这两个数字将相同。
或者,您可以计算xid
和yid
的不同对的数量,并找到最大的这样的数字:
select max(num_rows)
from(
select xid,yid,count(1) as num_rows
from table
group by xid,yid
)a;
当且仅当(1
,xid
)对形成表格的唯一标识符时,此查询的结果为yid
。
答案 2 :(得分:0)
这将列出xid,yid的所有问题组合(如果有的话):
SELECT
COUNT(*),xid,yid
FROM YourTable
GROUP BY xid,yid
HAVING COUNT(*)>1