mysql - 如何从选择查询更新另一个表中的列?
问题描述
我想从查询结果中更新另一个表中的某些列。我不断收到错误。请帮忙。
Update customer_info
set customer_info.reader_ID = aisle_info.reader_ID,
customer_info.tag_no = tag_logs.tag_no,
customer_info.area = aisle_info.area,
customer_info.max_timestamp = TIMESTAMPDIFF(SECOND,MIN(tag_logs.timestamp),MAX(tag_logs.timestamp))
FROM tag_logs
INNER join aisle_info ON tag_logs.reader_ID = aisle_info.reader_ID
WHERE T.tag_no = 515988190124;
1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在“FROM tag_logs”附近使用正确的语法
INNER join aisle_info ON tag_logs.reader_ID = aisle_info.reader_I' 在第 5 行
解决方案
你很亲密。不同的数据库对来自 select/join 的更新的语法略有不同。将 MySQL 视为一个 select 语句,并使用您尝试更新的主表的别名,然后是 SET 子句。
所以我首先要自己编写 SELECT 查询。
select
CI.Tag_No,
AI.Reader_ID,
AI.Area,
MIN( TL.TimeStamp ) MinTime,
MAX( TL.TimeStamp ) MaxTime
from
customer_info CI
join tag_logs TL
CI.tag_no = TL.tag_no
join aisle_info AI
on TL.Reader_ID = Reader_ID
WHERE
CI.tag_no = 515988190124
group by
CI.Tag_No,
AI.Reader_ID,
AI.Area
所以这给了我们你想要的最终结果,你可以根据需要进行确认。
然后应用您的更新,例如
update Customer_Info CIUpd
JOIN
( select
CI.Tag_No,
AI.Reader_ID,
AI.Area,
MIN( TL.TimeStamp ) MinTime,
MAX( TL.TimeStamp ) MaxTime
from
customer_info CI
join tag_logs TL
CI.tag_no = TL.tag_no
join aisle_info AI
on TL.Reader_ID = Reader_ID
WHERE
-- notice your filter is HERE for the one tag_no you want to update
-- and will result with only this on TAG_NO set of values returned
CI.tag_no = 515988190124
group by
CI.Tag_No,
AI.Reader_ID,
AI.Area ) FirstQuery
-- the JOIN will ensure updating only on that one tag_no
ON CIUpd.Tag_No = FirstQuery.Tag_No
set
CIUpd.Reader_ID = FirstQuery.Reader_ID,
CIUpd.Area = FirstQuery.Area,
CIUpd.Max_TimeStamp = TimeStampDiff( second, FirstQuery.MinTime, FirstQuery.MaxTime )
现在这不是一个完美的答案,因为您的原始查询不是使用 MIN() / MAX() 上下文的正确查询。进行聚合查询时,您需要对所有非聚合列应用分组依据。在这种情况下,您没有说明 Reader_ID 和 Area 上的任何此类组考虑因素,这可能导致 tag_logs 和 aisle_info 表中的多行。
如果给定 Tag_No 的通道信息始终相同,那么这很简单,只需跳过对其进行分组并将这些列检索值更改为每个 MAX()。如果它们从不更改,则 MAX() 甚至 MIN() 将始终返回相同的值,并且没有非聚合列的聚合查询不会出现问题。
如果您可以对数据、目的等提供额外的说明,请编辑您的原始帖子而不是仅发表评论。然后给我留下评论,请查看更新的信息。
推荐阅读
- d3.js - 是否可以在 D3 中可视化大图?
- java - Android Studio - 聊天不显示
- gradle - gradle:如何从另一个项目访问 gradle.properties
- css - 单击同一页面上的锚链接时关闭汉堡菜单
- python - Pandas 按时间绘制分组条形图
- python-3.x - 从数据类型为 tf.string 的张量中提取字符串值时遇到问题
- c++ - std::array 的初始化
当 T 不可默认构造时,在构造函数初始值设定项列表中 - c# - MVC 中的自定义验证属性
- html - 谁能告诉我如何用 HTML/CSS 插入它
- linux - 如何编写“bash script.sh 参数”