sql - 如何找出数据库中两列之间的关系?
问题描述
我在 SQL Server 数据库中定义了一个视图,它有两列 A 和 B,它们的类型都是 INT。我想找出这两者之间的关系,1 to 1
or 1 to many
or many to many
。有没有可以用来查找的 SQL 语句?
对于关系,它意味着对于给定的 A 值,有多少 B 值映射到该值。如果只有一个值,则为 1 对 1 映射。
解决方案
您可以使用CTE
s 来生成与每个值相关联的COUNT
不同值的 s值,反之亦然,然后取这些值中的 s 来确定每边的关系是 1 还是多个。例如:A
B
MAX
WITH CTEA AS (
SELECT COUNT(DISTINCT B) ac
FROM t
GROUP BY A
),
CTEB AS (
SELECT COUNT(DISTINCT A) bc
FROM t
GROUP BY B
)
SELECT CONCAT(
CASE WHEN MAX(bc) = 1 THEN '1' ELSE 'many' END,
' to ',
CASE WHEN MAX(ac) = 1 THEN '1' ELSE 'many' END
) AS [A to B]
FROM CTEA
CROSS JOIN CTEB
请注意,任何时候关系被列为1
,它实际上可能是many
但只是没有显示,因为表中的数据有限。
推荐阅读
- c# - 选择最小日期值并计算日期值?
- python - 如何每 x 小时在 bash 脚本中重新启动 python 脚本?
- angular - Angular 材料在 Angular 版本 9 中不起作用
- vue.js - 如何在 Buefy 轮播组件中设置 itemWidth?
- java - 如何处理 Android 运行时权限中的“不再询问”复选框?
- reactjs - 如何在传递的节点元素内传播组件道具?
- python - 在 matplotlib 的子图下方放置一个滑块
- java - 如何使用 Eclipse JDT 扩展基类并实现接口
- javascript - 单击另一个时关闭下拉菜单
- python - 如何使用 Python 将 Ansible std_outlines 输出 JSON 插入 MongoDB