GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

[Resolvido] Trazer o mesmo campo de uma tabela duas vezes através de um select com condições difentes

mysql
Tags: #<Tag:0x00007f4a287e21a0>

#1

Boa Tarde a todos, estou fazendo um trabalho para faculdade e empaquei… Se alguém puder me ajudar agradeço desde já.

É o seguinte, tenho uma tabela usuário e uma tabela ocorrência e em ocorrência tenho duas FKs que referenciam usuário ( campo de usuário que criou a ocorrência e o campo do usuário que é responsável por ela), eu queria fazer um select para trazer a a categoria , o usuário responsável e o que criou. Fiz o seguinte select :

Select ocorrencia.categoria,usuario.nome,usuario.nome as responsavel from ocorrencia inner join usuario on usuario.id_usuario_pk=ocorrencia.id_usuario_ocorrencia_fk and ocorrencia.id_responsavel_ocorrencia_fk=usuario.id_usuario_pk where ocorrencia.numero='OS20166317';

Até tentei dar um “as” no segundo nome pois achei que o problema era trazer o campo nome duas vezes mas continua voltando em branco

obrigado a todos


#2

Para resolver seu problema você precisa incluir a tabela USUARIO duas vezes, dando aliases diferentes. Veja:

Select ocorrencia.categoria ,usuario_ocorrencia.nome as usuario_ocorrencia ,usuario_responsavel.nome as usuario_responsavel from ocorrencia inner join usuario usuario_ocorrencia on usuario_ocorrencia.id_usuario_pk=ocorrencia.id_usuario_ocorrencia_fk inner join usuario usuario_responsavel on usuario_responsavel.id_usuario_pk = ocorrencia.id_responsavel_ocorrencia_fk where ocorrencia.numero='OS20166317';

Da forma que sua primeira tentativa foi escrita, seria como se o mesmo usuário que criou a ocorrencia fosse também o responsável por resolvê-la.


#3

Nossa , não pensei nessa possibilidade de incluir duas vezes a mesma tabela, muito obrigado! Me salvou.
Um grande abraço.


#4

Venho aqui pedir ajuda sobre o seguinte assunto:

Estou trabalhando com Access e a tabela em questão apresenta as operações realizadas (tempo de trabalho) no caso de ter interrupção, a interrupção tem a durabilidade desde o fim da operação até ao inicio da próxima operação.

Então sobre esta tabela, faço a seguinte pesquisa para saber quantas interrupções tenho e a que horas interromperam:

Dei o nome de “Inicio_interrupcoes”

SELECT dbo_opr.cod_gpt, dbo_opr.cod_pt, dbo_opr.un_pt, dbo_opr.data_ini, dbo_opr.data_fim, dbo_opr.cod_interrup, *
FROM dbo_opr
WHERE (((dbo_opr.cod_interrup) Is Not Null));

Este comando, executa corretamente, retornando todos os registos em que cod.interrup seja não nulo.

Seguindo agora o código onde preciso milagrosamente de ajuda:

SELECT inicio_interrupcoes.cod_gpt, inicio_interrupcoes.cod_pt, inicio_interrupcoes.un_pt, inicio_interrupcoes.data_fim, inicio_interrupcoes.cod_interrup
FROM dbo_opr INNER JOIN inicio_interrupcoes ON (dbo_opr.cod_gpt = inicio_interrupcoes.cod_gpt) AND (dbo_opr.cod_pt = inicio_interrupcoes.cod_pt)
GROUP BY inicio_interrupcoes.cod_gpt, inicio_interrupcoes.cod_pt, inicio_interrupcoes.un_pt, inicio_interrupcoes.data_fim, inicio_interrupcoes.cod_interrup, dbo_opr.data_ini
HAVING (((dbo_opr.data_ini)>[inicio_interrupcoes].[data_fim]));

Passando agora a explicar o que preciso:

Na primeira consulta “Inicio_Interrupcoes” pesquiso todas os registos que contenham o campo cod_interrup preenchido.

Na segunda consulta respeitando os campos cod_gpt e cod_pt pretendo obter a data de inicio da próxima operação que nesta consulta representa o fim da interrupção.

Segue exemplo básico:
considerem linha 2 e linha 3 da imagem:

Linha 2 representa produção -> Inicio = 10/01/2019 08:21:13
                               Fim = 10/01/2019 12:54:30

Como o registo tem Cod_interrup considero que 10/01/2019 12:54:30 representa o inicio da interrupção e o próximo inicio neste caso 10/01/2019 14:04:53 será o fim da interrupção e inicio da Produção.

Alguém me pode dar uma força neste assunto?