[英]How to update a table with subquery using data from the same table
我想从表中更新一列,而我想放入的数据是使用引用更新表的子查询进行数学运算的结果。
问题是我想使用上述数学运算中来自同一行的数据更新每一行。
这是示例:
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进行了多少次会话(例如10次),然后从“ X的”产品的会话总数中减去该数字(例如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
);
通常,您不能修改表并在子查询中从同一表中选择。
请参考此链接 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.