Ajuda com o select e join mysql
Pessoal estou precisando de um help em mysql
tenho uma tabela mãe com processos, uma tabela com cadastro de usuarios e uma tabela que indica quais são os usuarios alocados naquele processo
cada processo pode ter até 4 usuarios(linhas) com tipos de usuarios diferentes.
Por exemplo o processo 922749 possui 4 usuarios na tabela processo_credito_users
select * from processos_credito_users where processo_credito_id = 922749
id processo_credito_id user_id
4897608 922749 4
4897609 922749 722
4897610 922749 723
4897611 922749 721
os tipos se usuário são
id tipo_usuario
4 Incorporadora
721 Corretor
722 Gerente
723 Corretor
Eu preciso conseguir retornar somente o Corretor de maior ID mas quando eu aplico o select ele me retorna os dois
select pc.id, pcu.id, u1.id, u1.tipo_usuario from processos_credito pc
left join processos_credito_users pcu on pcu.processo_credito_id = pc.id
and pcu.user_id = (select max(u2.id) from users u2 where u2.id = pcu.user_id and u2.tipo_usuario = ''''Corretor'''' )
left join users u1 on u1.id = pcu.user_id
where pc.id = 922749
pc_id pcu_id user_id tipo_usuario
922749 4897610 723 Corretor
922749 4897611 721 Corretor
tenho uma tabela mãe com processos, uma tabela com cadastro de usuarios e uma tabela que indica quais são os usuarios alocados naquele processo
cada processo pode ter até 4 usuarios(linhas) com tipos de usuarios diferentes.
Por exemplo o processo 922749 possui 4 usuarios na tabela processo_credito_users
select * from processos_credito_users where processo_credito_id = 922749
id processo_credito_id user_id
4897608 922749 4
4897609 922749 722
4897610 922749 723
4897611 922749 721
os tipos se usuário são
id tipo_usuario
4 Incorporadora
721 Corretor
722 Gerente
723 Corretor
Eu preciso conseguir retornar somente o Corretor de maior ID mas quando eu aplico o select ele me retorna os dois
select pc.id, pcu.id, u1.id, u1.tipo_usuario from processos_credito pc
left join processos_credito_users pcu on pcu.processo_credito_id = pc.id
and pcu.user_id = (select max(u2.id) from users u2 where u2.id = pcu.user_id and u2.tipo_usuario = ''''Corretor'''' )
left join users u1 on u1.id = pcu.user_id
where pc.id = 922749
pc_id pcu_id user_id tipo_usuario
922749 4897610 723 Corretor
922749 4897611 721 Corretor
Victor
Curtidas 0
Respostas
Anderson Gonçalves
11/11/2022
Querido chegue aqui comigo que eu explico para você, mas preciso entender direito isso daí.
Skype: anderson.case13@gmail.com
select
pc.id, pcu.id, u1.id, u1.tipo_usuario
from
processos_credito pc
left join processos_credito_users pcu
on pcu.processo_credito_id = pc.id
left join users u1 on u1.id = pcu.user_id
where pc.id = 922749 and
// -> Essa parte fica no WHERE ( pcu.user_id = (select max(u2.id) from users u2 where u2.id = pcu.user_id and u2.tipo_usuario = ''''Corretor'''' ) )
mas ainda assim acho que essa sua comparação não está correta!
Skype: anderson.case13@gmail.com
select
pc.id, pcu.id, u1.id, u1.tipo_usuario
from
processos_credito pc
left join processos_credito_users pcu
on pcu.processo_credito_id = pc.id
left join users u1 on u1.id = pcu.user_id
where pc.id = 922749 and
// -> Essa parte fica no WHERE ( pcu.user_id = (select max(u2.id) from users u2 where u2.id = pcu.user_id and u2.tipo_usuario = ''''Corretor'''' ) )
mas ainda assim acho que essa sua comparação não está correta!
Pessoal estou precisando de um help em mysql
tenho uma tabela mãe com processos, uma tabela com cadastro de usuarios e uma tabela que indica quais são os usuarios alocados naquele processo
cada processo pode ter até 4 usuarios(linhas) com tipos de usuarios diferentes.
Por exemplo o processo 922749 possui 4 usuarios na tabela processo_credito_users
select * from processos_credito_users where processo_credito_id = 922749
id processo_credito_id user_id
4897608 922749 4
4897609 922749 722
4897610 922749 723
4897611 922749 721
os tipos se usuário são
id tipo_usuario
4 Incorporadora
721 Corretor
722 Gerente
723 Corretor
Eu preciso conseguir retornar somente o Corretor de maior ID mas quando eu aplico o select ele me retorna os dois
select pc.id, pcu.id, u1.id, u1.tipo_usuario from processos_credito pc
left join processos_credito_users pcu on pcu.processo_credito_id = pc.id
and pcu.user_id = (select max(u2.id) from users u2 where u2.id = pcu.user_id and u2.tipo_usuario = ''''Corretor'''' )
left join users u1 on u1.id = pcu.user_id
where pc.id = 922749
pc_id pcu_id user_id tipo_usuario
922749 4897610 723 Corretor
922749 4897611 721 Corretor
tenho uma tabela mãe com processos, uma tabela com cadastro de usuarios e uma tabela que indica quais são os usuarios alocados naquele processo
cada processo pode ter até 4 usuarios(linhas) com tipos de usuarios diferentes.
Por exemplo o processo 922749 possui 4 usuarios na tabela processo_credito_users
select * from processos_credito_users where processo_credito_id = 922749
id processo_credito_id user_id
4897608 922749 4
4897609 922749 722
4897610 922749 723
4897611 922749 721
os tipos se usuário são
id tipo_usuario
4 Incorporadora
721 Corretor
722 Gerente
723 Corretor
Eu preciso conseguir retornar somente o Corretor de maior ID mas quando eu aplico o select ele me retorna os dois
select pc.id, pcu.id, u1.id, u1.tipo_usuario from processos_credito pc
left join processos_credito_users pcu on pcu.processo_credito_id = pc.id
and pcu.user_id = (select max(u2.id) from users u2 where u2.id = pcu.user_id and u2.tipo_usuario = ''''Corretor'''' )
left join users u1 on u1.id = pcu.user_id
where pc.id = 922749
pc_id pcu_id user_id tipo_usuario
922749 4897610 723 Corretor
922749 4897611 721 Corretor
GOSTEI 0
Emerson Nascimento
11/11/2022
tente assim:
note que você não deve usar simplesmente o maior id de usuário cadastrado; você deve usar o maior id de usuário envolvido no processo.
select pc.id, pcu.id, u1.id, u1.tipo_usuario from processos_credito pc left join processos_credito_users pcu on pcu.processo_credito_id = pc.id left join users u1 on u1.id = pcu.user_id where pc.id = 922749 and u1.id = ( select max(pcu2.user_id) from processos_credito_users pcu2 where pcu2.processo_credito_id = pc.id )
GOSTEI 0
Emerson Nascimento
11/11/2022
faltou a condição de tipo do usuário:
select pc.id, pcu.id, u1.id, u1.tipo_usuario from processos_credito pc left join processos_credito_users pcu on pcu.processo_credito_id = pc.id left join users u1 on u1.id = pcu.user_id where pc.id = 922749 and u1.id = ( select max(pcu2.user_id) from processos_credito_users pcu2 inner join users u2 on u2.id = pcu2.user_id and u2.tipo_usuario = 'Corretor' where pcu2.processo_credito_id = pc.id )
GOSTEI 0
Arthur Heinrich
11/11/2022
select pc.id, u1.id, u1.tipo_usuario from processos_credito pc left join processos_credito_users pcu on pcu.processo_credito_id = pc.id and pcu.user_id = (select max(u2.id) from users u2 where u2.id = pcu.user_id and u2.tipo_usuario = ''''Corretor'''' ) left join users u1 on u1.id = (select pcu.id from processos_credito_users pcu where pcu.processo_credito_id = pc.id order by pcu.user_id limit 1) where pc.id = 922749
GOSTEI 0
Arthur Heinrich
11/11/2022
Faltou remover o join:
select pc.id, u1.id, u1.tipo_usuario from processos_credito pc left join users u1 on u1.id = (select pcu.id from processos_credito_users pcu where pcu.processo_credito_id = pc.id order by pcu.user_id limit 1) where pc.id = 922749
GOSTEI 0