繁体   English   中英

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

[英]MySQL use function column in where clause?

目前,我对自己的SQL技能有些不满意,并试图在下面的语句中了解如何解决该问题。 我有一个子查询,我必须从中选择,因为通过函数调用生成的列无法在同一查询的WHERE子句中引用。 因此,我必须选择一个子查询,以便可以在WHERE中使用“ BaseValue”。 我的问题是子查询返回的列多于1,这在运行MySQL时导致MySQL错误。

错误消息是:

“错误代码:1241。操作数应包含1列。”

这是在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.* ,您可能会获得所需的所有列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM