首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何有效地检查同一表中的两列是否为一对一映射?

如何有效地检查同一表中的两列是否为一对一映射?
EN

Stack Overflow用户
提问于 2016-10-20 09:14:38
回答 6查看 12.3K关注 0票数 4

尽管不同的值计数相等,但并不一定意味着一对一的映射关系。

代码语言:javascript
运行
复制
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?的存在?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-10-20 09:41:37

假设所有值都不是NULL。查询结果显示该值违反了1到1的关系。

代码语言:javascript
运行
复制
-- 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
票数 3
EN

Stack Overflow用户

发布于 2016-10-20 09:38:02

此查询将显示Column_A的任何值,其中Column_B有多个值。如果它不返回任何行,则有1到1的关系。

代码语言:javascript
运行
复制
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;
票数 3
EN

Stack Overflow用户

发布于 2020-05-01 22:27:00

上面的答案和接受的答案都是不正确的!我来这里是想找一种方法在一个查询中完成这个任务,但我不确定它是否存在。如果做不到这一点,我认为这是最简单的答案,它将检查它是否是一对一的关系(答案不要求提供关于非一对一值的任何信息,只是这些列是否是一对一的):

代码语言:javascript
运行
复制
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的一个值,因此它们定义为一对一。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40150208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档