迭代每一行并将两列的值传递给查询并将每个结果附加到表中
Posted
技术标签:
【中文标题】迭代每一行并将两列的值传递给查询并将每个结果附加到表中【英文标题】:ierate each row and pass the values of two columns to a query and append each result to the table 【发布时间】:2020-11-19 15:11:16 【问题描述】:我有一个表格,其结构如下,名称为table1
sid userid date result
1 169110 2020-01-03 (null)
2 178662 2020-01-06 (null)
3 165381 2020-01-07 (null)
5 368031 2020-01-08 (null)
7 163626 2020-01-09 (null)
现在我需要将 cft.userid
和 cft.date
的每一行值发送到一个 mysql 查询(查询如下),该查询给出每一行的结果值
UPDATE collision_fact_table cft
SET cft.on_time_completion = (
SELECT DISTINCT
CONCAT(ROUND(NULLIF(SUM(facttable.compliant), 0) / NULLIF(SUM(facttable.Occurences), 0) * 100), '%') AS `Percentage Completed`
FROM fd_dw.ComplianceFactTable facttable
WHERE (CAST(facttable.`CourseModule_dueDateID` AS date) - cft.collision_date) <= 0
AND facttable.UserLicenseInUsing = 1
AND (facttable.`CourseModule_dueDateID` > 0)
AND facttable.UserId = cft.userid
GROUP BY facttable.`UserID`);
例如,当我将用户 ID 169110 和日期值的第一行值发送到上述查询时,我将得到 69 的结果,我需要将 69 更新为 table1
,如下所示
sid userid date result
1 169110 2020-01-03 69
同样,它应该对所有行进行迭代,table1
应该像下面这样更新
sid userid date result
1 169110 2020-01-03 69
2 178662 2020-01-06 55
3 165381 2020-01-07 64
5 368031 2020-01-08 48
7 163626 2020-01-09 56
但是当我尝试执行更新查询时,它给了我错误 Unknown column 'cft.date' in field list
请任何人帮助我
【问题讨论】:
【参考方案1】:我认为你基本上想要一个相关的子查询:
update table1 t1
set result = (
select cd.result
from ...
where
cd.ScheduleDateID <= t1.date
and cd.CourseModuleComplete_DateID <= t1.date
and cd.UserId = t1.userid
)
您没有提供有关子查询本身的太多详细信息。关键是它应该返回一行,并且只返回一行:
如果它不返回任何行,则table1
中相应行的result
将设置为null
(无论其原始值如何) - 这可能是您想要的,也可能不是您想要的
如果返回多于一行,则查询会出错
【讨论】:
感谢您的回复!是否只有每一行的值会被传递到子查询中? @Sai:是的,对table1
中的每一行都执行子查询,并更新对应的result
。
嗨..我已经更新了问题中的子查询。我收到错误Unknown column 'cft.collision_date' in 'field list
以上是关于迭代每一行并将两列的值传递给查询并将每个结果附加到表中的主要内容,如果未能解决你的问题,请参考以下文章