我加入了我的总和结果

时间:2014-01-21 12:21:20

标签: mysql sql join

我尝试进行此查询,但结果多了4倍 这个字段是Time类型,也许这就是问题所在? 无论如何,当我加入其他表时会出现错误的结果,每次加入都会为结果增加1倍。

我操纵表格以匹配结果,我期望总和为40000,但是当我运行显示160000的查询时;

这是我的疑问:

SELECT SUM(tempoexposicao) AS exposicao 
FROM tb_programacao
INNER JOIN tb_go ON tb_programacao.cod_go=tb_go.cod_go
INNER JOIN tb_funcionario ON tb_go.equi_func1_mat=tb_funcionario.matricula_qt 
INNER JOIN tb_horario ON tb_horario.cod_funcionario=tb_funcionario.cod 
WHERE tb_funcionario.cod=1 
AND tb_programacao.data="2013-12-18"
AND tb_programacao.cod_go=1 
AND tb_programacao.codprogramacao=1
GROUP BY tb_programacao.item;

我的桌子:

tb_programação 
cod codprogramacao cod_go  obra                   item tempoexposicao
1   |1              |1       |QUALIFICAÇÃO SOLDADOR  |1    |01:00:00.000000
2   |1              |1       |QUALIFICAÇÃO SOLDADOR  |1    |01:00:00.000000

tb_go
cod cod_go projeto                  equi_func1_mat
1   |1     |QUALIFICACAO DE SOLDADOR|0677

2   |1     |HCC 066/12              |0677

tb_funcionario  
cod matricula_qt nome 
1  |0677        |ABEL ALBUQUERQUE FERREIRA

tb_horario  
cod cod_funcionario data
1   |2               |2014-01-01

3   |1               |2014-01-01

最后我解决了,伙计们 这是我想要的查询

SELECT (SELECT SEC_TO_TIME( SUM( TIME_TO_SEC(tempoexposicao))) 
    FROM tb_programacao AS t2 
    WHERE t2.item = t.item
    ) AS exposicao
FROM tb_programacao as t
    INNER JOIN tb_go ON t.cod_go=tb_go.cod_go
    INNER JOIN tb_funcionario ON tb_go.equi_func1_mat=tb_funcionario.matricula_qt 
    INNER JOIN tb_horario ON tb_horario.cod_funcionario=tb_funcionario.cod 
WHERE tb_funcionario.cod=1
    AND t.cod_go IS NOT NULL
    AND t.data="2013-12-18"
    AND t.cod_go=1 
    AND t.codprogramacao=1
GROUP BY t.clie_cod
ORDER BY CAST( t.cod_go AS SIGNED INTEGER ) ASC 

3 个答案:

答案 0 :(得分:0)

当您从查询中删除此部分时会发生什么

AND tb_programacao.data="2013-12-18"

你也可以尝试这个

SELECT SUM(tb_programacao.tempoexposicao) AS exposicao 
FROM tb_programacao
INNER JOIN tb_go ON tb_programacao.cod_go=tb_go.cod_go
INNER JOIN tb_funcionario ON tb_go.equi_func1_mat=tb_funcionario.matricula_qt 
INNER JOIN tb_horario ON tb_horario.cod_funcionario=tb_funcionario.cod 
WHERE tb_funcionario.cod=1 
AND tb_programacao.data="2013-12-18"
AND tb_programacao.cod_go=1 
AND tb_programacao.codprogramacao=1
GROUP BY tb_programacao.item;

答案 1 :(得分:0)

如果我们有您的数据库架构,您会得到更好的答案。 您可以尝试执行此查询。

SELECT (SELECT SUM(tempoexposicao) 
    FROM tb_programacao AS t2 
    WHERE t2.item = t.item
    ) AS exposicao
FROM tb_programacao as t
    INNER JOIN tb_go ON t.cod_go=tb_go.cod_go
    INNER JOIN tb_funcionario ON tb_go.equi_func1_mat=tb_funcionario.matricula_qt 
    INNER JOIN tb_horario ON tb_horario.cod_funcionario=tb_funcionario.cod 
WHERE tb_funcionario.cod=1 
    AND t.data="2013-12-18"
    AND t.cod_go=1 
    AND t.codprogramacao=1
GROUP BY t.item;

答案 2 :(得分:0)

您可能会从连接中获得多个匹配项,这会增加您的联接结果集。

检查此方法的一种快捷方法是删除总和以显示结果的原始行。

查看提供的示例数据,如果cod_go是连接的唯一键,则tb_programacao和tb_go之间存在多个匹配项。仅这一点就可以使你的总和结果翻倍因此,添加更多条件以获得连接的唯一键将有所帮助。例如,加入cod_go和cod?