使用子查询时应当注意的

博客围绕SQL子查询展开,给出一个UPDATE查询示例,该查询中内部子查询单独运行正常,但整体运行时在group附近报错。经反复试验,发现问题与内部子查询有关,通过给子查询添加别名(如as c、DERIVEDTBL)可解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一个查询中:

UPDATE a
SET a.scts = b.v1, a.YCYL = b.v2, a.YCSL = b.v3
FROM kfdbsyy a,
          (SELECT f_wellnumber, COUNT(*) AS v1, SUM(f_fule) AS v2,
               SUM(f_totalliquid - f_fule) AS v3
         FROM (SELECT *
                 FROM CY_WELLRECORD
                 WHERE f_reporttime LIKE '2004-06%') 
         GROUP BY f_wellnumber
) b
WHERE a.JH = b.f_wellnumber AND a.ny = '200406'

红色在子查询单独运行没有问题,但整个运行,老是报告group附近有错。反复试验,发现跟内部的子查询有关。改为
UPDATE a
SET a.scts = b.v1, a.YCYL = b.v2, a.YCSL = b.v3
FROM kfdbsyy a,
          (SELECT f_wellnumber, COUNT(*) AS v1, SUM(f_fule) AS v2,
               SUM(f_totalliquid - f_fule) AS v3
         FROM (SELECT *
                 FROM CY_WELLRECORD
                 WHERE f_reporttime LIKE '2004-06%')  as c
         GROUP BY c.f_wellnumber) b
WHERE a.JH = b.f_wellnumber AND a.ny = '200406'
或者
UPDATE a
SET a.scts = b.v1, a.YCYL = b.v2, a.YCSL = b.v3
FROM kfdbsyy a,
          (SELECT f_wellnumber, COUNT(*) AS v1, SUM(f_fule) AS v2,
               SUM(f_totalliquid - f_fule) AS v3
         FROM (SELECT *
                 FROM CY_WELLRECORD
                 WHERE f_reporttime LIKE '2004-06%') DERIVEDTBL
         GROUP BY f_wellnumber) b
WHERE a.JH = b.f_wellnumber AND a.ny = '200406'

均可。

转载于:https://www.cnblogs.com/jetz/archive/2005/09/30/247595.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值