我有一个非正规化形式的表,如下所示:
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查询证明这一点?基本上我需要证明有像#"巴黎 - 法国 - 欧洲","华盛顿特区 - 美国 - 北美"等等,但从来没有"巴黎 - 美国 - 欧洲"或者"华盛顿特区 - 美国 - 欧洲"例如。实际上,如果我找到类似"柏林 - 德国 - 非洲"在我的数据库中,只要我找不到"柏林 - 德国 - 欧洲"。
答案 0 :(得分:2)
你不能。
SQL查询可以反驳依赖项,因为您只需要一个计数器示例。但证明依赖意味着显示它可以从不被破坏,而当前的DB内容只代表一个例子。
答案 1 :(得分:1)
您可以使用聚合:
select col3, count(*), count(distinct col2)
from t
group by col3;
期望第二列的值为" 1"。您可以使用col2
在having count(distinct col2) > 1
中获取包含多个值的所有示例。
当然,城市的名称相同。例如,巴黎是一个众所周知的city in Texas。