首页 > 解决方案 > 如何找出数据库中两列之间的关系?

问题描述

我在 SQL Server 数据库中定义了一个视图,它有两列 A 和 B,它们的类型都是 INT。我想找出这两者之间的关系,1 to 1or 1 to manyor many to many。有没有可以用来查找的 SQL 语句?

对于关系,它意味着对于给定的 A 值,有多少 B 值映射到该值。如果只有一个值,则为 1 对 1 映射。

标签: sqlsql-server

解决方案


您可以使用CTEs 来生成与每个值相关联的COUNT不同值的 s值,反之亦然,然后取这些值中的 s 来确定每边的关系是 1 还是多个。例如:ABMAX

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但只是没有显示,因为表中的数据有限。

dbfiddle 上的演示


推荐阅读