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

无JOIN实现按关联文档数分类is_resident=N客户的SQL查询

查询需求说明
  • 涉及两张业务表:customers(客户表)、documents(文档表)
  • 表间匹配规则:customers表的Id字段与documents表的cs_no字段为关联字段,cs_no字段允许存储重复值
  • 字段规则:customers表的is_resident字段为枚举值,仅可取Y或N
  • 语法限制:禁止使用JOIN语法
  • 业务规则:仅统计is_resident字段值为N的客户,按关联文档数做标记:
    • 客户ID在documents.cs_no中仅出现1次(关联1份文档),标记为one document
    • 客户ID在documents.cs_no中出现2次及以上(关联2份及以上文档),标记为some documents
    • 客户ID未在documents.cs_no中出现(无关联文档),标记为no document
实现SQL
SELECT
    c.Id AS customer_id,
    CASE
        WHEN (SELECT COUNT(1) FROM documents WHERE cs_no = c.Id) = 1 THEN 'one document'
        WHEN (SELECT COUNT(1) FROM documents WHERE cs_no = c.Id) >= 2 THEN 'some documents'
        ELSE 'no document'
    END AS document_tag
FROM customers c
WHERE c.is_resident = 'N';
逻辑说明
  • 整个语句未出现JOIN关键字,完全符合语法限制要求
  • 外层查询先通过WHERE c.is_resident = 'N'过滤出所有需要统计的非居民客户
  • 针对每一条符合条件的客户记录,通过标量子查询统计对应关联的文档总数,全程未使用表连接逻辑
  • 通过CASE分支对统计到的文档数做判断,返回对应的分类标签:
    • 统计值为1时返回单文档标记
    • 统计值≥2时返回多文档标记
    • 统计值为0(无匹配文档记录)时返回无文档标记
  • 性能优化提示:如果表数据量较大,可以给documents表的cs_no字段添加普通索引,大幅提升子查询的统计效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:18:14