尽管不同的值计数相等,但并不一定意味着一对一的映射关系。
SELECT COUNT(DISTINCT [Column_A]) FROM MyTable
SELECT COUNT( DISTINCT [Column_B]) FROM MyTable A栏:1 2 3 4 5 6 7 8 9 10 1
B栏:a、b、c、d、e、g、h、i、j
上面的查询为每个列返回一个10的值,但它们不是一对一的映射。
我怎样才能预先确认这个matching type?的存在?
发布于 2016-10-20 09:41:37
假设所有值都不是NULL。查询结果显示该值违反了1到1的关系。
-- Check Column A value which DOES NOT maps to exactly 1 Column_B value
SELECT Column_A, COUNT(Column_B) FROM MyTable GROUP BY Column_A HAVING COUNT(Column_B) > 1
-- Check Column B value which DOES NOT maps to exactly 1 Column_A value
SELECT Column_B, COUNT(Column_A) FROM MyTable GROUP BY Column_B HAVING COUNT(Column_A) > 1发布于 2016-10-20 09:38:02
此查询将显示Column_A的任何值,其中Column_B有多个值。如果它不返回任何行,则有1到1的关系。
select [Column_A], count([Column_B]) as not_distinct
from (select [Column_A], [Column_B] from MyTable
group by [Column_A], [Column_B]) subtable
group by [Column_A]
having count([Column_B]) >1;发布于 2020-05-01 22:27:00
上面的答案和接受的答案都是不正确的!我来这里是想找一种方法在一个查询中完成这个任务,但我不确定它是否存在。如果做不到这一点,我认为这是最简单的答案,它将检查它是否是一对一的关系(答案不要求提供关于非一对一值的任何信息,只是这些列是否是一对一的):
SELECT [Column_A] FROM MyTable GROUP BY [Column_A] HAVING COUNT(DISTINCT [Column_B]) > 1
SELECT [Column_B] FROM MyTable GROUP BY [Column_B] HAVING COUNT(DISTINCT [Column_A]) > 1如果这两个查询都返回零行,那么您就知道Column_A映射的每个值只映射到Column_B的一个值,而Column_B的每个值则映射到Column_A的一个值,因此它们定义为一对一。
https://stackoverflow.com/questions/40150208
复制相似问题