gpt4 book ai didi

SQL INNER QUERY 在 UPDATE 查询中返回多个值

转载 作者:行者123 更新时间:2023-12-02 23:22:16 24 4
gpt4 key购买 nike

我有一个表要使用另一个表的记录进行更新,我这样做是为了将信息从一个系统(数据库)转移到另一个系统(数据库)。场景有点复杂,但我迫切需要帮助 :-s

有 3 个表 - componentscanstage_link

组件

component_id  stage_id
------------ --------
1 NULL
2 NULL
3 NULL
4 NULL
5 NULL

扫描

scan_id  component_id  scanner_id           date_scanned
------- ------------ ---------- -----------------------
1 1 scanner_a 2012-01-01 07:25:15.125
2 1 scanner_b 2012-01-02 08:14:05.456
3 2 scanner_a 2012-01-01 12:05:45.465
4 3 scanner_a 2012-01-01 19:45:12.536
5 1 scanner_c 2012-01-03 23:33:54.243
6 2 scanner_b 2012-01-02 11:59:12.545

stage_link

stage_link_id  scanner_id  stage_id
------- ---------- ----------
1 scanner_a 1
2 scanner_b 1
3 scanner_c 2
4 scanner_d 2
5 scanner_e 2
6 scanner_f 3

我需要根据最新扫描更新component设置字段stage_id。每次扫描都会根据所涉及的扫描仪将组件带到一个阶段。我编写了以下查询来更新组件,但它抛出一个错误:

子查询返回超过 1 个值。当子查询跟在“=”后面时,这是不允许的

查询是;

UPDATE component
SET stage_id = (select stage_id
from(
select scn.scanner_id, sl.stage_id
from scan scn
INNER JOIN stage_link sl ON scn.scanner_id = sl.scanner_id
where scn.date_scanned = ( select temp_a.max_date
from ( SELECT x.component_id, MAX(x.date_scanned) as max_date
FROM scan x
where component_id = x.component_id
GROUP BY x.component_id
) as temp_a
where component_id = temp_a.component_id)
) as temp_b
)

我正在使用 MS SQL Server,并且希望不使用 PHP 或任何其他语言来解决这个问题。

我已经尝试了一天来完成这项工作,但仍然没有找到一种方法来完成这项工作。任何帮助将不胜感激!

提前非常感谢您:-)

最佳答案

在不使用相关子查询的情况下检查一下:

UPDATE  Com
SET stage_id = Temp4.stage_id
FROM dbo.component Com
INNER JOIN
(
SELECT Temp2.component_id ,SL.stage_id
FROM dbo.stage_link SL
INNER JOIN (
SELECT component_id ,scanner_id
FROM scan
WHERE date_scanned IN (
SELECT MaxScanDate
FROM
(
SELECT component_id , MAX(date_scanned) MaxScanDate
FROM scan
GROUP BY component_id
) Temp
)
) Temp2 ON Temp2.scanner_id = SL.scanner_id
) Temp4 ON Com.component_id = Temp4.component_id

输出:

component_id stage_id
------------ -----------
1 2
2 1
3 1
4 NULL
5 NULL

关于SQL INNER QUERY 在 UPDATE 查询中返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12094658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com