You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL查询判断关系R中(a,b)→c函数依赖是否成立?

问题描述

给定包含属性a、b、c的非空关系表R,编写SQL查询:当函数依赖a, b → c被表满足时,返回仅含值’True’的结果表;若不满足,查询结果为空。

示例:
当表R数据如下:

a   b   c
--  --  --
20  15  10
20  15  10

查询输出应为:

value
-----
True
解决方案

要验证函数依赖a, b → c是否成立,核心是检查是否存在同一组(a,b)对应多个不同的c值。如果不存在这种情况,依赖成立,返回'True';反之返回空结果。

方法一:分组验证法

SELECT 'True' AS value
WHERE NOT EXISTS (
    SELECT a, b
    FROM R
    GROUP BY a, b
    HAVING COUNT(DISTINCT c) > 1
);
  • 子查询逻辑:按(a,b)分组后,统计每组内不同c值的数量。如果某组的COUNT(DISTINCT c) > 1,说明该(a,b)对应多个c值,违反了函数依赖。
  • 外层查询:当子查询无结果返回(即没有违反依赖的分组),就输出'True';否则不返回任何数据。

方法二:唯一组合数对比法

SELECT 'True' AS value
WHERE (
    SELECT COUNT(DISTINCT a, b) FROM R
) = (
    SELECT COUNT(DISTINCT a, b, c) FROM R
);
  • 逻辑说明:如果每个(a,b)对应唯一的c值,那么(a,b,c)的唯一组合数必然等于(a,b)的唯一组合数。两者相等时,函数依赖成立,返回'True'。

内容的提问来源于stack exchange,提问作者John Young

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:55:21