Sql 确定表中列之间的相关性

Sql 确定表中列之间的相关性,sql,database-normalization,Sql,Database Normalization,我有一个非规范化表格,如下所示: Col1 Col2 Col3 Col4 Col5 Paris France Europe 1 4 Paris France Europe 2 5 Paris France Europe 3 6 Washington D.C.

我有一个非规范化表格,如下所示:

Col1               Col2      Col3            Col4 Col5 
Paris              France    Europe          1     4
Paris              France    Europe          2     5
Paris              France    Europe          3     6
Washington D.C.    USA       North America   8     9
Washington D.C.    USA       North America   7     7
... 
many more rows
...
为了规范化它,我需要理解数据的结构

从Col3到Col2以及从Col2到Col1可能存在逻辑依赖关系。巴黎是法国的首都,法国是欧洲的一个国家

如何用SQL查询证明这一点?基本上,我需要证明有像“巴黎-法国-欧洲”、“华盛顿特区-美国-北美”这样的组合,但从来没有像“巴黎-美国-欧洲”或“华盛顿特区-美国-欧洲”这样的组合。事实上,如果我在数据库中找到类似“柏林-德国-非洲”的内容,只要我没有找到“柏林-德国-欧洲”,那么这个查询也应该被证明是正确的


SQL查询可以反驳依赖关系,因为您只需要一个反例。但证明依赖关系意味着表明它永远不会被破坏,而当前的DB内容只代表一个示例。

您可以使用聚合:

select col3, count(*), count(distinct col2)
from t
group by col3;
期望第二列的值为“1”。通过使用
having count(distinct col2)>1,可以获得
col2
中具有多个值的所有示例


当然,城市确实有相同的名字。例如,巴黎是一个相当有名的城市。

你能用真实数据更新你的问题吗?包含数字和字母的五列有点抽象。嗨@TimBiegeleisen,我更新了问题谢谢,看起来你的答案中分号太多了。@Paul。非常感谢。