gpt4 book ai didi

MySQL错误: operand should contain 1 column(s) on simple update query

转载 作者:行者123 更新时间:2023-11-29 17:04:23 27 4
gpt4 key购买 nike

我在 MySQL 中有一个存储过程,它应该根据条件更新名为“task”的表的值。问题出在下面一行

UPDATE task SET validity = 1 WHERE id = _task_id;

此查询不执行任何操作,尽管在本例中它有效:

UPDATE task SET validity = NULL WHERE id = _task_id;

从 PHP 页面调用时执行存储过程,并且我确信所有 IN 参数都是有效的,因为该过程的其他行都正确执行。

这是“任务”表的定义:

  CREATE TABLE task(
id INT AUTO_INCREMENT NOT NULL,
camp_id INT NOT NULL,
heading VARCHAR(200) NOT NULL UNIQUE,
description VARCHAR(300) NOT NULL,
validity INT(1),
PRIMARY KEY(id),
CONSTRAINT task_fk
FOREIGN KEY(camp_id) REFERENCES work_campaign(id)
ON DELETE CASCADE
) ENGINE = InnoDB;

存储过程:

    DELIMITER //

DROP PROCEDURE IF EXISTS define_task_result;
CREATE PROCEDURE define_task_result(IN _task_id INT, IN count_answers INT)
BEGIN
DECLARE _camp_id INT;
DECLARE _validity_threshold INT;
DECLARE count_answer_options INT;
DECLARE counter INT unsigned;
DECLARE _option VARCHAR(100);
DECLARE _percentage INT;
DECLARE max_percentage INT;
DECLARE selected_option_number INT;
DECLARE check_max_number INT;


SET _camp_id = (SELECT camp_id FROM task WHERE id = _task_id);
SET _validity_threshold = (SELECT validity_threshold FROM work_campaign WHERE id = _camp_id);
SET counter = 0;

DROP TABLE IF EXISTS options_percentage;
CREATE TABLE options_percentage (
opt VARCHAR(100),
percentage INT DEFAULT 0
);

INSERT INTO options_percentage(opt)
SELECT answer_option FROM task_answers_options WHERE task_id = _task_id;

SET count_answer_options = (SELECT COUNT(*) FROM options_percentage);

WHILE counter < count_answer_options DO
SET _option = (SELECT opt FROM options_percentage LIMIT counter,1);
SET selected_option_number = (SELECT COUNT(*) FROM task_worker_answers WHERE answer = _option);
SET _percentage = (selected_option_number / count_answers) * 100;
UPDATE options_percentage SET percentage = _percentage WHERE opt = _option;
SET counter = counter + 1;
END WHILE;

SET check_max_number = (SELECT COUNT(*) FROM options_percentage WHERE percentage = (SELECT MAX(percentage) FROM options_percentage));

IF check_max_number > 1 THEN
UPDATE task SET validity = NULL WHERE id = _task_id;
ELSE
SET max_percentage = (SELECT percentage FROM options_percentage WHERE percentage = (SELECT MAX(percentage) FROM options_percentage LIMIT 1));

IF max_percentage >= _validity_threshold THEN
UPDATE task SET validity = 1 WHERE id = _task_id;
ELSE
UPDATE task SET validity = NULL WHERE id = _task_id;
END IF;
END IF;


END //

DELIMITER ;

当我尝试从命令行调用相同的查询时,出现以下错误 - 操作数应包含 1 列。我真的看不出解决的方法..

最佳答案

您有一个查询调用返回多个值。

就是这里的这个。它位于 ELSE 语句的顶部,其中包含原始问题中的“问题行”。

SET max_percentage = (SELECT percentage FROM options_percentage WHERE percentage = (SELECT MAX(percentage) FROM options_percentage));

说明如下

从 options_percentage 中选择最大值(百分比)

这很好,它只会返回一个值。

从 options_percentage 中选择百分比,其中百分比 = {标量}

这并不总是有效。当出现多个百分比匹配时会发生什么?

您可以在 SQL Server 中使用 TOP 来限制结果。其他 RMDB 也有类似的功能,您可以查找。我相信 MySQL 的等价物是 LIMIT,它位于 SELECT 语句 的末尾。希望有帮助。

针对您的问题更新8/31

这就是你目前拥有的(从 options_percentage LIMIT 1 中选择 MAX(百分比)))

需要变成这样(从 options_percentage 中选择最大值(百分比))LIMIT 1)

目前,您正在LIMIT“良好”查询,而不是有问题的查询。

因此,上述更改的完整内容如下:

SET max_percentage = (SELECT percentage FROM options_percentage WHERE percentage = (SELECT MAX(percentage) FROM options_percentage) LIMIT 1);

关于MySQL错误: operand should contain 1 column(s) on simple update query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52119764/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com