Mysql 使用子查询更新临时表,联接表失败
我的数据库中有一个评估行表,希望从第一次评估中获取一些数据,并将其与最近一次评估中的相同数据一起显示,以便可以轻松查看从第一次评估到当前评估的进展情况。我使用两次评估中的三个值以及当前评估中的其他数据来进行评估 为此,我认为我需要创建临时表来保存两组字段以及当前评估中的其他字段 我的临时表创建如下:Mysql 使用子查询更新临时表,联接表失败,mysql,sql,join,sql-update,mysql-error-1054,Mysql,Sql,Join,Sql Update,Mysql Error 1054,我的数据库中有一个评估行表,希望从第一次评估中获取一些数据,并将其与最近一次评估中的相同数据一起显示,以便可以轻松查看从第一次评估到当前评估的进展情况。我使用两次评估中的三个值以及当前评估中的其他数据来进行评估 为此,我认为我需要创建临时表来保存两组字段以及当前评估中的其他字段 我的临时表创建如下: CREATE TEMPORARY TABLE appraisal_lines_submitted ( current_perceived_state INT(2), current_
CREATE TEMPORARY TABLE appraisal_lines_submitted (
current_perceived_state INT(2),
current_actual_state INT(2),
current_desired_state INT(2),
agreed_action_points TEXT,
agreed_actions_target_date DATE,
assessor_notes TEXT,
category_id INT(2),
sub_categories_id INT(2),
sub_categories_description VARCHAR(45),
sequence_number INT(3) PRIMARY KEY,
first_perceived_state INT(2),
first_actual_state INT(2),
first_desired_state INT(2)
);
然后,我运行一个insert和select语句,如下所示,将当前评估中的数据放入临时表中:
INSERT INTO appraisal_lines_submitted (
current_perceived_state,
current_actual_state,
current_desired_state,
agreed_action_points,
agreed_actions_target_date,
assessor_notes,
category_id,
sub_categories_id,
sub_categories_description,
sequence_number)
SELECT appraisal_lines.perceived_state,
appraisal_lines.actual_state,
appraisal_lines.desired_state,
appraisal_lines.agreed_action_points,
DATE_FORMAT (appraisal_lines.agreed_actions_target_date, '%d/%m/%Y') AS agreed_actions_target_date_formatted,
appraisal_lines.assessor_notes,
appraisal_lines.assessment_category_id,
assessment_sub_categories.id,
assessment_sub_categories.description,
assessment_sub_categories.sequence_number
FROM appraisal_lines LEFT JOIN assessment_sub_categories
ON appraisal_lines.assessment_sub_category_id = assessment_sub_categories.id
WHERE hyperlink_token ='db678f8595edcd78d8ea7f055f7ee790b804c91e'
AND assessment_category_id ='5'
ORDER BY sequence_number;
这样行
但是,当我运行下面的update语句时,它失败了
UPDATE appraisal_lines_submitted JOIN
(SELECT appraisal_lines.perceived_state as update_perceived_state
FROM appraisal_lines
WHERE hyperlink_token ='d7cc7e1adc116e0dac31cbad34cd9a2b322c3507'
AND assessment_category_id ='5'
ORDER BY appraisal_lines.assessment_sub_category_id
) AS increments
ON increments.update_perceived_state = appraisal_lines.perceived_state
SET appraisal_lines_submitted.first_perceived_state = update_perceived_state;
带着错误
错误代码:1054
“on子句”中的未知列“评估行.感知状态”
我根据帖子写了update语句:解析器无法看到表的评估行,因为您正在更新提交的评估行 在内部选择中指定评估线的唯一位置,该选择别名为增量
您也可以在内部选择中删除ORDER BY,无论内部数据的顺序如何,都将执行联接。解析器无法看到表评估行,因为您正在更新提交的评估行 在内部选择中指定评估线的唯一位置,该选择别名为增量
您也可以在内部选择中删除ORDER BY,无论内部数据的顺序如何,都将执行联接。以下是您的脚本,其中一些位以粗体突出显示:
UPDATE appraisal_lines_submitted JOIN
(SELECT appraisal_lines.perceived_state as update_perceived_state
FROM appraisal_lines
WHERE hyperlink_token ='d7cc7e1adc116e0dac31cbad34cd9a2b322c3507'
AND assessment_category_id ='5'
ORDER BY appraisal_lines.assessment_sub_category_id
) AS increments
ON increments.update_perceived_state = appraisal_lines.perceived_state
SET appraisal_lines_submitted.first_perceived_state = update_perceived_state;
现在,在脚本中,您将一个名为evaluation\u lines\u的表连接到一个名为increments的派生表。连接条件引用增量中的列和。。。等一下,你在排队吗?那是什么?在参与联接的人员中没有该名称的表
我的猜测是,连接条件中的评估线。感知线状态引用应替换为评估线。提交。当前感知线状态
我的另一个猜测是,ORDER BY之后您错过了限制1,这是基于首先更新的列的名称\u severed\u state以下是您的脚本,其中一些位以粗体突出显示:
UPDATE appraisal_lines_submitted JOIN
(SELECT appraisal_lines.perceived_state as update_perceived_state
FROM appraisal_lines
WHERE hyperlink_token ='d7cc7e1adc116e0dac31cbad34cd9a2b322c3507'
AND assessment_category_id ='5'
ORDER BY appraisal_lines.assessment_sub_category_id
) AS increments
ON increments.update_perceived_state = appraisal_lines.perceived_state
SET appraisal_lines_submitted.first_perceived_state = update_perceived_state;
现在,在脚本中,您将一个名为evaluation\u lines\u的表连接到一个名为increments的派生表。连接条件引用增量中的列和。。。等一下,你在排队吗?那是什么?在参与联接的人员中没有该名称的表
我的猜测是,连接条件中的评估线。感知线状态引用应替换为评估线。提交。当前感知线状态
我的另一个猜测是,ORDER BY之后,您错过了限制1,这是基于首先更新的列的名称\u Perceptive\u state感谢Tony取得了进展,但在这种情况下,内部选择查询返回多行6行,但这将取决于放入评估\u category\u id中的值。临时表每行更新一次,在本例中,同样会更新6行,但更新将使用每行中的第一行结果。非常感谢您的帮助。@Mike-听起来您需要修改相关子查询以将内部行链接到外部行。评估行的主键是什么?它与提交的评估行有何关系?您已经使用increments.update\u perceptive\u state=评估\u line.perceptive\u state链接它们,但是哪个字段可以确保只有一个内行更新外部行?谢谢,我将其更改为设置评估\u line\u submitted.first\u perceptive\u state=update\u perceptive\u state其中sub\u categories\u id=increments.assessment\u sub\u categories\u categority\u id,它可以工作现在感谢您的帮助,非常感谢。对于所有人,下面的最终声明更新评估线提交加入选择感知状态作为更新感知状态,评估子类别id来自评估行,其中hyperlink_token='D7CC7E1ADC116E0DAC31CAD34CD9A2B322C3507'和评估子类别id='1'作为增量。更新感知状态集评估行已提交。首先感知状态=更新感知状态,其中子类别id=增量。评估\子\类别\ id;感谢Tony取得了进展,但内部选择查询在本例中返回多行6行,但这将根据放入评估\u类别\u id中的值而有所不同。临时表每行更新一次,在本例中再次更新6行,但更新使用每行中的第一行结果。非常感谢您的帮助。@Mike-听起来您需要修改相关子查询以将内部行链接到外部行。评估行的主键是什么?它与提交的评估行有何关系
? 您已经使用increments.update\u perceptive\u state=评估\u line.perceptive\u state链接它们,但是哪个字段可以确保只有一个内行更新外部行?谢谢,我将其更改为设置评估\u line\u submitted.first\u perceptive\u state=update\u perceptive\u state其中sub\u categories\u id=increments.assessment\u sub\u categories\u categority\u id,它可以工作现在感谢您的帮助,非常感谢。对于所有人,下面的最终声明更新评估线提交加入选择感知状态作为更新感知状态,评估子类别id来自评估行,其中hyperlink_token='D7CC7E1ADC116E0DAC31CAD34CD9A2B322C3507'和评估子类别id='1'作为增量。更新感知状态集评估行已提交。首先感知状态=更新感知状态,其中子类别id=增量。评估\子\类别\ id;感谢Andrey,我已经删除了=evaluation_line.sensived_状态,但现在临时表中的每一行都用SELECT语句第一行的结果进行了更新。谢谢你的帮助。@Mike:恐怕我帮不了你。好吧,除非你详细说明它应该是怎样的。感谢Tony的建议,我能够让它工作,感谢您的帮助。感谢Andrey看起来是我删除的=evaluation_line.severeded_状态,但现在临时表中的每一行都会使用SELECT语句第一行的结果进行更新。谢谢你的帮助。@Mike:恐怕我帮不了你。好吧,除非你详细说明它应该是怎样的。谢谢托尼的建议,我能够让它工作,谢谢你的帮助。