Логически определите составной ключ в SQL
Я работаю с таблицей MSSQL, в которой не определен первичный или уникальный ключ contstraint. Есть два поля, назовем их xId и yId, которые, как я полагаю, вместе будут составным ключом, но я хочу подтвердить это, изучив данные.
Я думаю, что я должен быть в состоянии написать инструкцию SQL count, которую я могу сравнить с общим количеством записей в таблице, которая логически определила бы, нужна ли комбинация xId и yId (или третий идентификатор столбца) на самом деле он может выступать в качестве составного ключа. Однако у меня возникли проблемы с выбором правильной группы или другого типа предложения, которое подтвердило бы или опровергло это.
Есть идеи?
3 ответа:
Используйте
group by
иhaving
:select xid,yid from table group by xid,yid having count(1) > 1
Это покажет любые пары, которые не являются уникальными, так что если нет строк, возвращаемых его хороший ключ.
Просто сделайте
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
) пары формируют уникальный идентификатор для вашей таблицы.