繁体   English   中英

使用子查询的SQL更新

[英]SQL Update using subquery

我正在尝试使用子查询来更新表,但它无法识别表别名,当我尝试运行它时,会弹出一个带有“ t1.rDate”的框,我的查询是:

 UPDATE Results SET odds4 = 
(SELECT SUM(IIF(odds >= 4, 1, 0)) FROM Results t1
GROUP BY t1.rDate, t1.rTime, t1.rTrack)
WHERE rDate = t1.rDate AND rTime = t1.rTime AND rTrack = t1.rTrack AND t1.rDate 
>= #2019/05/28#;

例:

   rDate   | rTime | rTrack | horse   | odds | odds4
------------------------------------------------------
28/05/2019 | 13:00 | Ascot  | horse1  | 2.5  |  3
28/05/2019 | 13:00 | Ascot  | horse2  | 34   |  3
28/05/2019 | 13:00 | Ascot  | horse3  | 1.4  |  3
28/05/2019 | 13:00 | Ascot  | horse4  | 6    |  3
28/05/2019 | 13:00 | Ascot  | horse5  | 4    |  3
28/05/2019 | 14:30 | Epsom  | horse1  | 3    |  2
28/05/2019 | 14:30 | Epsom  | horse2  | 1.75 |  2
28/05/2019 | 14:30 | Epsom  | horse3  | 2    |  2
28/05/2019 | 14:30 | Epsom  | horse4  | 12   |  2
28/05/2019 | 14:30 | Epsom  | horse5  | 66   |  2

我认为您想要一个相关的子查询:

UPDATE Results
    SET odds4 = (SELECT SUM(IIF(t1.odds >= 4, 1, 0))
                 FROM Results t1
                 WHERE t1.rDate = Results.rDate AND
                       t1.rTime = Results.rTime AND
                       t1.rTrack = Results.rTrack
                )
WHERE Results.rDate >= #2019/05/28#;

尝试这个:

UPDATE Results SET odds4 = 
                 CASE 
                    WHEN odds >= 4 THEN 1
                    ELSE 0
                 END 
WHERE rDate >= #2019/05/28#;

编辑代码:

UPDATE Results SET odds4 = (SELECT t1.odds4
 FROM
    (
     SELECT  rDate,
                     rTime,
                     rTrack,
                    SUM(IIF(odds >= 4, 1, 0)) AS odds4
      FROM Results
     GROUP BY rDate, rTime, rTrack
    ) AS t1

  WHERE Results.rDate = t1.rDate
    AND Results.rTime = t1.rTime
    AND Results.rTrack = t1.rTrack
)
    WHERE Results.rDate >= #2019/05/28#;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM