Ajuda com o select e join mysql

MySQL

11/11/2022

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
Victor

Victor

Curtidas 0

Respostas

Anderson Gonçalves

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!


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
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

11/11/2022

tente assim:
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
				)
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.
GOSTEI 0
Emerson Nascimento

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

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

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
POSTAR