2012-12-10 2 views
2

하위 필드에서 생성 된 두 개의 가상 필드를 새 필드로 조작하려고하지만 MySQL에서 "GP"가 알 수없는 열이지만 이미 선언되었습니다. 내 쿼리에서 봐 주시기 바랍니다 : 당신이 볼 수 있듯이MySQL이 가상 열/필드를 인식하지 못합니다.

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은이 열을 인식하지 못합니다.

어떻게 해결할 수 있습니까?

솔루션

덕분에 도움을 많이,들,하지만 난 문제를 알아 냈어. "GP"와 "GC"가 런타임 중에 존재하지 않으므로 "SALDO"는 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 (...) 
+2

별칭을 쿼리 선택 목록에 사용하여 열에 다른 이름을 지정할 수 있습니다. 'GROUP BY','ORDER BY' 또는'HAVING' 절에서 별칭을 사용하여 열을 참조 할 수 있습니다. 매뉴얼 http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html을보십시오. 어떤 종류의 스크립트에서이 쿼리를 사용하고 있습니까? 아니면 그냥 sql입니까? – piotrekkr

+0

'tb_equipe','tb_gruposEquipes' 및'tb_grupos'의 테이블 구조를 추가 할 수 있습니까? 이것은 그룹 디버깅을 돕기위한 멋진 웹 애플리케이션입니다 : http://sqlfiddle.com/ – Stefan

답변

1

밀어 물건

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 
관련 문제