gpt4 book ai didi

mysql - 如何使用同一个表中的数据通过子查询更新表

转载 作者:行者123 更新时间:2023-11-29 18:52:00 24 4
gpt4 key购买 nike

我想更新表中的列,并且我想要输入的数据是使用引用更新表的子查询进行数学运算的结果。

问题是我想使用上述数学运算中同一行的数据来更新每一行。

示例如下:

    UPDATE licenses as lic    SET lic.numSessions =     (    select difference from    (select    (    select (p.numSessions * p.numMonth) as num from products p    inner join licenses l on p.idProduct = l.idProduct and l.idpatient = lic.idPatient and l.currentLicense = 1    )    -    (    SELECT COUNT(distinct s.idSession) as num    FROM sessions s     WHERE s.idPatient = lic.idPatient    AND s.dateValue >= (select l.dateCreated from licenses l where l.idPatient = lic.idPatient and l.currentLicense = 1) AND s.status = 2    )    as difference       )     x    );

编辑:

我想要的示例:

每一行“许可证”都有一个“idPatient”。我们称之为“X”。

我想查看 X 已完成多少 session (例如 10),然后从“X”产品的 session 总数(例如 50)中减去该数字。因此 X 的更新结果将是:50 - 10 = 40。

单独的子查询工作得很好,我的值是 50,然后是值 10,然后当我尝试减去时,我的值 40 作为名为“差异”的列。

我遇到的问题是查询无法识别减法操作中第一个子查询中的值“lic.idPatient”:

    /* SQL Error (1054): Unknown column 'lic.idPatient' in 'on clause' */

预先感谢并抱歉我的写作,我的母语不是英语。

最佳答案

你必须像这样编写查询

UPDATE licenses AS licNew
SET licNew.numSessions =
(
SELECT x.difference FROM
((SELECT
(
SELECT (p.numSessions * p.numMonth) AS num FROM products p
INNER JOIN licenses l ON p.idProduct = l.idProduct AND l.idpatient = lic.idPatient AND l.currentLicense = 1
)
-
(
SELECT COUNT(DISTINCT s.idSession) AS num
FROM sessions s
WHERE s.idPatient = 6361
AND s.dateValue >= (SELECT l.dateCreated FROM licenses l WHERE l.idPatient = 6361 AND l.currentLicense = 1) AND s.status = 2
))
AS difference, lic.idPatient
FROM licenses lic
)
X WHERE licNew.idPatient = x.idPatient
);

一般来说,您不能修改表并在子查询中从同一个表中进行选择。

请引用此link .

关于mysql - 如何使用同一个表中的数据通过子查询更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44327168/

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