gpt4 book ai didi

MySQL 在where 子句中使用函数列?

转载 作者:行者123 更新时间:2023-11-28 23:41:13 25 4
gpt4 key购买 nike

我现在对我的 SQL 技能有点生疏,并试图了解我如何解决以下语句中的问题。我有一个必须从中选择的子查询,因为无法在同一查询的 WHERE 子句中引用通过函数调用生成的列。所以我必须选择一个子查询,以便可以在 WHERE 中使用“BaseValue”。我的问题是子查询返回超过 1 列,这在我运行时导致 MySQL 出错。

错误信息是:

"Error Code: 1241. Operand should contain 1 column(s)."

这发生在 INSERT INTO 语句下的第二个 SELECT 语句附近。

谁能告诉我如何最有效地解决这个问题?有问题的代码:

CREATE TEMPORARY TABLE tSquads (
Id INT(11) NOT NULL AUTO_INCREMENT,
SquadId INT(11),
SquadBaseValue INT(11),
SquadName VARCHAR(50),
PRIMARY KEY (ID)
) ENGINE=MEMORY;

INSERT INTO tSquads (SquadId, SquadBaseValue, SquadName)
SELECT (temp.Id, temp.BaseValue, temp.Name) FROM (
SELECT
Id,
f_GetSquadAverageBaseValue(Id) AS BaseValue,
Name
FROM
squads
) temp
WHERE
Id <> pSquadId
AND BaseValue BETWEEN vLowestAttackingBaseRate AND vHighestAttackingBaseRate
AND BaseValue > 0
AND ((vPercentageOfBaseRate / 100) * BaseValue) + BaseValue > vCurrentSquadBaseRate
ORDER BY
RAND();

谢谢。

最佳答案

我猜测这个查询可能有效:

INSERT INTO tSquads (SquadId, SquadBaseValue, SquadName)
SELECT temp.Id, temp.BaseValue, temp.Name
FROM (SELECT s.*, f_GetSquadAverageBaseValue(Id) AS BaseValue
FROM squads s
) temp
WHERE Id <> pSquadId AND
BaseValue BETWEEN vLowestAttackingBaseRate AND vHighestAttackingBaseRate AND
BaseValue > 0 AND
((vPercentageOfBaseRate / 100) * BaseValue) + BaseValue > vCurrentSquadBaseRate
ORDER BY RAND();

您的 WHERE 子句引用了许多子查询未提供的列。通过使用 s.*,您可能会获得所需的所有列。

关于MySQL 在where 子句中使用函数列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34322620/

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