我尝试进行此查询,但结果多了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
答案 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?