我想根据查询结果更新另一个表中的某些列。我不断出错。请帮忙。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.HBox?>
<HBox fx:id="hBox" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="javafxapplication363.FXMLDocumentController" />
在第5行的INNER处加入aisle_info ON tag_logs.reader_ID = aisle_info.reader_I'
答案 0 :(得分:0)
你很近。不同的数据库在选择/联接的更新中的语法略有不同。将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()上下文的正确查询。进行汇总查询时,您需要在所有NON汇总列上应用分组依据。在这种情况下,您没有在Reader_ID和Area上阐明任何此类组注意事项,它们可能会导致tag_logs和过道信息表中出现多行。
如果对于给定的Tag_No,过道信息始终都是相同的,那么这很简单,只需跳过该分组,然后将这些列检索值分别更改为MAX()。如果它们永远不变,则MAX()甚至MIN()都将始终返回相同的值,并且在没有非聚合列的情况下聚合查询不会出现问题。
如果您可以提供其他数据,目的等方面的说明,请编辑您的原始帖子,而不要发表评论。然后给我留言,以获取更新信息。