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

如何修改SQL查询,获取指定GeoCode主客户及子客户的Trap数据?

正确的SQL查询修改方案

你可以通过两种方式实现需求:获取自身CustomerGeoCode匹配指定值的主客户,以及这些主客户关联的子客户的所有Trap数据。

方法1:使用IN子查询

先筛选出所有符合条件的主客户ID,再关联出他们的子客户ID,最后将这两类ID作为筛选条件:

SELECT 
    Customer.CompanyName, 
    Customer.Address_1 as CompanyAddress, 
    Customer.ZipCode, 
    Customer.City, 
    Customer.CountryCode, 
    Trap.TrapID, 
    Trap.Name
FROM 
    Trap 
INNER JOIN Customer 
    ON Trap.CustomerID = Customer.CustomerID 
WHERE 
    -- 自身是符合GeoCode条件的主客户,或者是该主客户的子客户
    Customer.CustomerID IN (
        -- 先取符合GeoCode的主客户ID
        SELECT CustomerID FROM Customer WHERE CustomerGeoCode = 'code'
        UNION
        -- 再取这些主客户的子客户ID
        SELECT ct.CustomerID 
        FROM CustomerToLevel1 ct
        INNER JOIN Customer c 
            ON ct.Level1ID = c.CustomerID 
        WHERE c.CustomerGeoCode = 'code'
    )

方法2:使用JOIN关联层级关系

通过LEFT JOIN关联CustomerToLevel1和主客户,直接筛选出主客户或其下属子客户:

SELECT 
    c.CompanyName, 
    c.Address_1 as CompanyAddress, 
    c.ZipCode, 
    c.City, 
    c.CountryCode, 
    t.TrapID, 
    t.Name
FROM 
    Trap t
INNER JOIN Customer c 
    ON t.CustomerID = c.CustomerID
-- 关联主客户:要么自身是主客户,要么通过层级表找到对应的主客户
LEFT JOIN CustomerToLevel1 ct 
    ON c.CustomerID = ct.CustomerID
LEFT JOIN Customer main_c 
    ON COALESCE(ct.Level1ID, c.CustomerID) = main_c.CustomerID
WHERE 
    main_c.CustomerGeoCode = 'code'

原写法的问题分析

你之前的exists子查询逻辑错误:

  • 子查询中未将当前Customer表的记录与子查询关联,导致条件判断混乱
  • 错误判断“当前客户是否有子客户”,而非“当前客户是否是符合条件的主客户的子客户”

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:37:24