MySQL 无法识别虚拟列/字段

标签 mysql subquery virtual field

我试图将子查询生成的两个虚拟字段操作到一个新字段中,但 MySQL 告诉我“GP”是一个未知列,但它已被声明。请看一下我的查询:

SELECT *,

(SELECT COUNT(id_gol) FROM tb_gol as gol
INNER JOIN tb_jogo as jg ON(gol.fk_id_jogo = jg.id_jogo)
WHERE gol.ic_excluido != '*' AND gol.fk_id_equipe = e.id_equipe AND jg.fk_id_campeonato = g.fk_id_campeonato) as 'GP',

(SELECT COUNT(id_gol) FROM tb_gol as gol
INNER JOIN tb_jogo as jg ON(gol.fk_id_jogo = jg.id_jogo)
WHERE gol.ic_excluido != '*' AND gol.fk_id_equipe != e.id_equipe AND (jg.fk_id_equipe1 = e.id_equipe OR jg.fk_id_equipe2 = e.id_equipe) AND jg.fk_id_campeonato = g.fk_id_campeonato) as 'GC',

(SELECT COUNT(id_wo) as WOs FROM tb_wo as w INNER JOIN tb_jogo as j ON (w.fk_id_jogo = j.id_jogo) WHERE w.fk_id_equipe = e.id_equipe AND j.fk_id_campeonato = g.fk_id_campeonato) as 'WO',

(GP+(GC*-1)) as 'SALDO'

FROM tb_equipe as e
INNER JOIN tb_gruposEquipes as ge ON (e.id_equipe = ge.fk_id_equipe)
INNER JOIN tb_grupos as g ON (g.id_grupo = ge.fk_id_grupo)
WHERE g.fk_id_campeonato = 23
ORDER BY WO ASC

如您所见,“SALDO”将是“GP-GC”的结果。但是 MySQL 不识别这些列

我该如何解决这个问题?

解决方案

非常感谢大家的帮助,但我已经解决了问题。 “SALDO”无法通过减去 GP 的 GC 创建,因为“GP”和“GC”在运行时不存在。

因此,当您需要在运行时操作虚拟字段时,您将不得不重复生成虚拟字段的代码。

然后,如果你有这个选择:

SELECT *, (field1+1) as 'GP', (field2+1) as 'GC', (GP+GC) as 'SALDO' FROM (...)

您需要将其替换为:

SELECT *, (field1+1) as 'GP', (field2+1) as 'GC', ((field1+1)+(field2+1)) as 'SALDO' FROM (...)

最佳答案

将内容插入内部查询

    SELECT core.*,
    (GP+(GC*-1)) as 'SALDO'

    from (

    (SELECT COUNT(id_gol) FROM tb_gol as gol
    INNER JOIN tb_jogo as jg ON(gol.fk_id_jogo = jg.id_jogo)
    WHERE gol.ic_excluido != '*' AND gol.fk_id_equipe = e.id_equipe AND jg.fk_id_campeonato = g.fk_id_campeonato) as 'GP',

    (SELECT COUNT(id_gol) FROM tb_gol as gol
    INNER JOIN tb_jogo as jg ON(gol.fk_id_jogo = jg.id_jogo)
    WHERE gol.ic_excluido != '*' AND gol.fk_id_equipe != e.id_equipe AND (jg.fk_id_equipe1 = e.id_equipe OR jg.fk_id_equipe2 = e.id_equipe) AND jg.fk_id_campeonato = g.fk_id_campeonato) as 'GC',

    (SELECT COUNT(id_wo) as WOs FROM tb_wo as w INNER JOIN tb_jogo as j ON (w.fk_id_jogo = j.id_jogo) WHERE w.fk_id_equipe = e.id_equipe AND j.fk_id_campeonato = g.fk_id_campeonato) as 'WO' ) 


    FROM tb_equipe as e

    ) as core 
    INNER JOIN tb_gruposEquipes as ge ON (core.id_equipe = ge.fk_id_equipe)
    INNER JOIN tb_grupos as g ON (g.id_grupo = ge.fk_id_grupo)
    WHERE g.fk_id_campeonato = 23
    ORDER BY WO ASC

关于MySQL 无法识别虚拟列/字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13800626/

相关文章:

php - 尝试使用 eloquent 从 SQL 数据库获取最大数量时出错

php - MySQL Php语法错误,查看手册

mysql - 重新评估每个 INSERT 的 MySQL 子查询

javascript - 将子查询转换为 JavaScript 以便在 Node 中使用

c++ - 如何可靠地调用直接父级的虚函数

c++ - Windows中是否有任何内存虚拟文件API?

php - Ubuntu 12.10 上的 PHP MySQL 问题

mysql - Navicat无法通过ssh连接mysql服务器

php - 条件为假时是否执行子查询?

c++ - 删除还是虚拟删除?